2020.03.16 Multiprocessing의 map_async, apply등 나머지
Multiprocessing에서 map 함수의 불편한 점은 2개 이상의 인자를 취하는 함수를 사용할 수 없다는 것이다. 예를 들어 pool.map(func, [(10, 20)])을 하면 func의 첫번째 인자로 10, 두번째 인자로 20이 들어가기를 기대하지만 막상 실행해보면 그냥 첫번째 인자에 (10, 20) 튜플이 들어가게 된다. 이 땐 multi-argument를 accept 하는 함수로 starmap을 사용할 수 있다. map_async callback과 error_callback을 인자로 받을 수 있다. Non-block 방식이기 때문에 프로세스에게 일감을 부여하고 바로 다시 메인 쓰레드로 제어권이 돌아온다. 제어권이 돌아오고 다른 프로세스들은 job을 열심히 돌릴텐데, 이 때 job의 결과물이 모두 반환되면 실행할 callback을 정의할 수 있다. 각 프로세스별로 실행한 함수의 return값을 모두 모아서 callback의 인자로 넘겨준다. 따라서 callback을 정의하여 어디에 notify를 해주던가, 알려주던가 하는 방법이 있다. 완료 되었을 때 callback을 넘겨줄 수 있기 떄문에 후처리를 해줄 수 있다. 이를 확인할 수 있는 함수는 get, wait, ready, successful def callback(res): print(res) pool = multiprocessing.Pool() # 현재 PC의 CPU 코어가 12개이다. a = pool.map_async(calc, range(21, 26), callback=callback) print(a.ready()) print('Blo...