• 공부한 날짜: 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 실행하기

 

  • 출력결과

  • 공부한 날짜: 2021.12

 

  • Concurrency
  • CPU Bound vs I/Bound
  • 작업 목적에 따라서 적절한 동시성 라이브러리 선택이 중요하다 
CPU Bound  I/O Bound
프로세스 진행
-> CPU 속도에 의해 제한(결정)
-> 행렬 곱, 고속 연산, 압출 파일, 집합 연산 등
파일쓰기, 디스크 작업, 네트워크 통신, 시리얼 포트 송수신
-> 작업에 의해서 병목에 따라 수행시간이 결정됨
 CPU의 연산 위주 작업 시 사용. CPU 성능에 따라 달라진다 CPU 성능 지표가 수행시간 단축에 크게 영향을 미치지 않는다 

 

 

  • 최종 비교
Multiprocessing Threading AsyncIO
Multiple Processes, 고가용성(CPU) Utilization -
> CPU-Bound
-> 10개의 요리사, 10개의 요리 
Single(Multi) process, Multiple threads, OS decides task switching
-> Fast I/O Bound

 -> 1개의 부엌, 10명의 요리사, 10명의 요리 
Single process, Single thread, cooperative multitasking, tasks cooperatively decides switching
-> Slow I/O Bound
-> 1개의 부엌, 1명의 요리사, 10개의 요리 

 

 

+ Recent posts