현재 파이썬 3.5 이상에서이 문제에 접근하는 방법에 어려움을 겪고 있습니다. 멀티 프로세싱, 멀티 스레딩 또는 asyncio이
while True:
do_process1() # run this synchronously
do_process2() # don't wait on this to go to the next iteration but need to handle its completion
그리고이 경우에
는do_process2()
시간이 오래 걸리는 :
나는 다음과 같다 코드가 있습니다. do_process2()
을 비동기 적으로 실행하여 루프의 다음 반복이 do_process2()
에서 완료 될 때까지 기다리지 않도록합니다.
내가 읽고있는 것으로부터 멀티 스레딩을 사용할 수는 있지만 GIL을 사용하면 어떻게하면 "offload"do_process2()
수 있고 다음 반복 실행을 볼 수는 없습니다.
여기서는 멀티 프로세싱이 적합 할 것으로 보입니다. 그 말을 듣고, 많은 예제들이 나와 있습니다. 은 서브 프로세스에서을 기다려야 작업을 마칠 수 있습니다. 나는 그것을하고 싶지 않다. 나는 계속 while
루프를 실행하고 싶다.
마찬가지로, 비동기 호출 do_process2()
에서 콜백을 처리하여 해당 작업의 완료를 처리 할 수 있기를 원합니다. 나는 그걸 apply_async()
에있는 Pool
객체로 처리 할 수 있다는 것을 알았지 만, 그게 가장 좋은 접근법인가?
가장 좋은 방법은 무엇입니까? 파이썬 3.5 이상을 사용하고 있습니다. 그래서 asyncio가이 모든 것에 적합 할까? 멀티 스레딩처럼 생각합니다. 나는 오프로드 및 계속 작업을 찾고 싶지 않을 것입니다.
감사합니다. 그렇다면 파이썬의 멀티 스레딩 부분에 대한 asyncio의 기능은 무엇입니까? 그것은 또 다른 방법일까요? – user7327326