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
[ 참고 ] :
'ProgramingTip' 카테고리의 다른 글
Twitter 부트 유효성 3- 사용자 지정 글 리피 콘을 만들고 글 리피 "글꼴"에 추가 (0) | 2020.11.28 |
---|---|
node.js에서 process.env를 스텁하는 방법은 무엇입니까? (0) | 2020.11.28 |
Android M의 가동 권한에서 거절하지 중지하고 중지를 어떻게 중지합니까? (0) | 2020.11.28 |
정수 접미사 J는 무엇을 의미합니까? (0) | 2020.11.28 |
Convert.ChangeType 및 열거 형으로 변환? (0) | 2020.11.28 |