ProgramingTip

Python 3.4의 다중 처리 대 다중 스레딩 대 asyncio

bestdevel 2020. 11. 28. 10:11
반응형

Python 3.4의 다중 처리 대 다중 스레딩 대 asyncio


Python 3.4에는 다중 처리 / 스레딩을위한 몇 가지 다른 라이브러리가 있음을 발견했습니다. 다중 처리스레딩asyncio .

하지만 어떤 것을 있는지하는지 또는 "권장"인지 모르겠습니다. 같은 일을, 아니면 다른가요? 용도 어떤 용도로 사용합니까? 내 컴퓨터에서 멀티 코어를 사용하는 프로그램을 작성하고 싶습니다. 하지만 어떤 라이브러리를 배워야할지 모르겠습니다.


(약간) 다른 목적 및 / 또는 요구 사항을위한 것입니다. CPython (일반적인 주요 Python 구현)에는 여전히 전역 인터프리터 잠금이 있으므로 다중 응용 프로그램 (요즘 메시지 처리를 구현하는 표준 방법)은 차선책입니다. 이유 multiprocessing 보다 선호한다 threading. 그러나 모든 문제가 [거의 독립적 인] 조각으로 분할되는 것은 아니 많은 프로세스 간 통신이 필요합니다. 때문에 그렇기 일반적 multiprocessing으로 선호되지 않을 수 있습니다 threading.

asyncio(이 기술은 Python에서만 사용할 수있는 것이 아니라 다른 언어 및 / 또는 프레임 워크에서 사용할 수 있습니다 (예 : Boost.ASIO ))는 여러 I / O 작업을 처리하는 방법입니다. . 따라서 일반적으로 송신 처리가 아닌 특정 작업에 대한 솔루션 (실제로 좋은 것!)입니다.


[빠른 답변]

TL; DR


올바른 선택 :

가장 많이 사용되는 동시성 형식을 보았습니다. 그러나 질문은 남아 있습니다-언제 어느 것을 선택해야합니까? 실제로 사용 사례에 따라. 내 경험과 독서에서 나는 다음과 같은 의사 코드를 따르는 경향이 있습니다.

if io_bound:
    if io_very_slow:
        print("Use Asyncio")
    else:
        print("Use Threads")
else:
    print("Multi Processing")

  • CPU 바운드 => 다중 처리
  • I / O, 빠른 I / O, 경계 연결 수 => 다중 스레딩
  • I / O 바운드, 느린 I / O, 많은 연결 => Asyncio

참고


[ 참고 ] :

  • 긴 호출 메서드 (예 : 휴면 시간 또는 지연 I / O가있는 메서드)가있는 경우 최상의 선택은 동시성으로 하나의 단일와 함께 작동하는 asyncio , Twisted 또는 Tornado 접근 방식 (코 루틴 메서드)입니다.
  • asyncio는 작동 Python3.4 이후.
  • TornadoTwistedPython2.7 부터 준비되었습니다.
  • uvloop 는 매우 빠른 asyncio이벤트 루프입니다 ( uvloopasyncio2-4 배 더 빠름).

참고 URL : https://stackoverflow.com/questions/27435284/multiprocessing-vs-multithreading-vs-asyncio-in-python-3-4

반응형