• 공부한 날짜: 2021.12.05

 

  • 동시 프로그래밍 패러다임의 변화 발생
  • 싱글 코어: 처리향상 미미하거나 저하 -> 비동기 프로그래밍이 대두됨  -> CPU 연산, DB 연동, API 호출 대기 시간 늘어남
  • 제어권을 넘겨서 다른 작업을 하다가 다시 작업을 이어서할 수 있게함 
  • 파이썬 3.4 -> 비동기(asyncio)가 표준라이브러리로 등장 

 

 

  • 주의해야할 점 -> 비동기 함수에서 비동기 함수로 실행할 때는 반드시 await 입력해야한다 -> 걍 외워야함 

 

  • I/O Bound AsyncIO 예제
  • 같은 내용의 함수를 async(), sync()로 구현 
  • 다른 점 찾아보기 

 

 

1. Async()

  • exe_calculate_async()
  • async로 진행할 함수는 무조건 async def 선언하기 
  • 비동기 함수에서 비동기 함수로 실행하므로 await 입력하기 
  • exe_calculate_async -> process_async
  • asyncio.sleep(i): i 초 동안 태스크 중단 후 다른 태스크 실행 

 

  • process_async()
  • asyncio. wait(): 코루틴 함수에 시간 제한을 두고싶을 때 사용하면 된다-> 이부분은 아직 이해가 잘 가지 않는다 나중에 다시 한번 더 봐야할듯 (해당 내용 사이트: https://www.daleseo.com/python-asyncio/)

 

2. Sync()

 

  • exe_calculate_sync()
  • await asyncio.sleep이 아닌 time.sleep임 

 

  • process_sync()
  • await asyncio.wait()가 아닌 그냥 함수에 파라미터 넣음 

 

  • main 실행 

1. Sync 실행: 하나의 프로세스 진행 중에 다른 프로세스 진행 불가 

2. Async 실행 and 파이썬 3.7 이상 : 다른 프로세스 진행 가능 

3. Async 실행 and 파이썬 3.6 이하 

  • 공부한 날짜: 2021.12.05
  • 실행 흐름에 따라 코드를 논리적으로 진행하는 것이 코딩하는 것에 있어서 가장 중요하다(어떤게 필요한 상황인지 생각하기)

 

    멀티프로세싱이 적합한 상황

  • IO Bound Volume이 매우 커졌을 때
  • 작업량이 늘어났을 때
  • 독립/병렬적으로 처리해야하는 일일 때
  • 독립적이고, 고속 연산 작업에 할 때(CPU)

 

  • I/O Bound Multiprocessing Pool 예제

 

  • session값 초기화 하는 것 -> 눈여겨서 잘 보기
  • 미리 initializing해서 일할 준비를 미리 하는 것 -> 높은 실행속도 보장 

 

  • 각 프로세스 메모리 영역에 생성되는 객체-> 독립적이다
  • 함수 실행 할때마다 객체 생성은 좋지 않음 -> 각 프로세스마다 할당(하기 때문인가?) 확인해보기 

 

  • 실행함수1 : 다운로드 
  • session은 위에서 이미 생성했음-> url만 받으면 됨 
  • multiprocessing.current_process().name: 

 

  • 실행함수2 : 요청 
  • 멀티프로세싱 실행
  • 반드시 process 개수 조절 후 session 객체 및 실행시간 확인 

 

  • main 함수 구현 

 

  • main() 실행 

  • 공부한 날짜: 2021. 12.06

 

  • I/O Bound Threading 

 

  • get_session(): 이거는 어디에 쓰이는건지?? 세션을 가져오는 건가 
  • threading.local(): 스레드별로 구별되는 네임스페이스를 제공한다
  • threading.local()에서 session이라는 속성이 없으면 request.Session()으로 세션 생성하기? 

 

  • 실행함수 1
  • request_site(url)
  • session은 get_session()으로 가져오므로 따로 파라미터로 안 가지고 와도 됨 

 

  • 실행함수2(요청)
  • concurrent.futures.ThreadPoolExecutor(max_worker=) :최대 max_workers 스레드의 풀을 사용하여 호출을 비동기적으로                                 실행하는 Executor 서브 클래스

 

  • main() 

 

  • main함수 실행 

  • 공부한 날짜: 2021.12.04
  • import requests 오류 -> pip install request 터미널에서 하고 -> Shell interpreter 선택해서 불러와야함 
  • 원래 url 3개 였는데 하나 오류나서 두개로 변경 

 

  • request 터미널에서 설치 

 

  • 실행함수1(다운로드)

 

  • 실행함수2 : 주어진 url들 파라미터 넣고, requests.Session()을 session으로 넣어서 request_site 실행함 
  • requests.Session(): 세션 생성. With 구문안에서만 실행됨
  • 그렇다면 session은 무엇인가? -> 웹 통신간 유지하려는 정보를 저장하기 위해 사용하는것/ 쿠키와 비교해서 알아두면 될 것 같다
  • 자세한 정보가 나와있는 사이트: https://hahahoho5915.tistory.com/32

 

  • main()

 

  • main 실행하기

 

  • 출력결과

+ Recent posts