• 공부한 날짜: 2021.11.
  • Keyword: ProcessPoolExecutor, as_completed, futures, timeout, dict
  • Future Object는 예약된 시점, 실행되고 있는 것이 아님 

 

 

  • 사용할 url들 리스트로 선언 

 

  • urllib.request: url(uniform resource locator)을 가져오기 위한 파이썬 모듈 
  • conn.read(): url들 읽어오는 것 같음

 

  • main() 
  • multiprocess 실행. 최대 5개로 실행 
  • future_to_url이 딕셔너리 -> executor.submit(load_url,url,60)이 key 값이고, url for url in URLS 가 value
  • executor.submit(load_url,url,60): load_url(url,60)처럼 실행되도록 예약하고, 콜러블 객체의 실행을 나타내는 Future 객체를 반환한다(?)

 

 

 

  • 무슨 이유인지 정상적으로 작동이 안됨 urlopen 하는데 문제가 생기는 것 같음

  • 공부한 날짜: 2021.11. 
  • Keyword: Naming, parallel processing
  • 라이브러리 import

 

  • 제곱함수 정의

-os.getpid():

-current_proceess().name: 

 

  • main()

-os.getpid()로 parent의 process id 설정하기 

 

  • 프로세스 생성 및 배열에 담은 후 실행하기(t.start())/ for문 총 8번 실행

 

  • process.join()이므로 실행 프로세스 하나씩 수행됨

 

  • 출력 결과 

 

  • process.join()을 없애고 실행했을때
  • 바로 main 함수 출력문 출력되고, 나머지 프로세스 실행됨

  • 공부한 날짜: 2021.11.

 

-이전 내용들과 겹치는 내용이 있지만 반복적인 학습을 위해 또 포스팅함

 

  • 서브 프로세스 함수(proc_func) 정의

 

  • main 함수 정의 
  • logging format 설정
  • logging.basicConfig(format=,level=, datafmt=)

 

  • 함수 인자 확인
  • Process(target=, arg=(여기에 들어가는게 proc_func의 파라미터가 됨)

 

  • p.start(): 프로세스 시작 

 

  • p.join(): 쓰레드/ 프로세스가 작업을 완료될 때까지 기다리게 하는 메서드.

-프로세스는 여러번 join 될 수 있으며, 교착상태를 유발할 수 있으므로 프로세스는 자기 자신을 Join할 수 없다.

-프로세스가 시작되기 전에 프로세스에 조인하려고 하면 에러가 발생함

-p.join()을 너어주지 않으면 자식 프로세스는 유휴상태(idle)에 들어가고, 종료되지 않아 좀비 프로세스가 되어 손수 kill 해줘야함

-출처: http://pertinency.blogspot.com/2019/10/join.html

 

  • p.is_alive(): 프로세스가 살아있는지 아닌지를 반환한다. 프로세스 객체는 start() 메서드가 반환하는 순간부터 자식 프로세스가 종료될때까지 살아있다. 자식 프로세스가 종료되면 프로세스는 종료되므로 출력값이 false가 되는건가?

-출처: https://docs.python.org/ko/3/library/multiprocessing.html

 

  • 메인 함수 시작 

 

 

  • p.join()을 넣었을 때와 안 넣었을 때의 결과 값 비교 

 

-p.join() 존재 

 

 

-p.join() 비존재

: alive의 값이 True가 되었고, 마지막이 아닌 중간에 출력되었다

  • 공부한 날짜: 2021. 11.

 

  • Parallelism(병렬성)

- 완전하게 동일한 타이밍(시점)에 태스크 실행

-다양한 파트로 나눠서 실행(합을 나눠서 구하고, 취합할 수 있음)

-멀티프로세싱에서 CPU가 1Core인 경우 만족하지 않는다

-딥러닝, 비트코인 채굴 등에 사용할 수 있음

 

 

  • Process 와 Thread 차이 비교
Process  Thread
독립된 메모리  공유 메모리 
많은 메모리 필요 적은 메모리 필요 
좀비(데드) 프로세서 생성 가능 좀비(데드) 스레드 생성 쉽지 않음 
오버헤드 큼  오버헤드 작음 
생성/소멸 다소 느림  생성/소멸 빠름
코드 작성이 쉽지만 디버깅이 어려움 코드 작성이 어렵고, 디버깅도 어려움

 

+ Recent posts