파이썬 병렬 처리 예제

비동기/await 구문은 PEP492에서 도입되었습니다. 비동기 def 구문은 함수를 코루틴으로 표시합니다. 내부적으로 코루틴은 파이썬 생성기를 기반으로하지만 정확히 같은 것은 아닙니다. 코루틴은 생성기가 생성기 개체를 반환하는 방법과 유사한 코루틴 개체를 반환합니다. 동루틴이 있으면 await 식으로 결과를 얻을 수 있습니다. 코루틴 호출이 대기할 때 대기 가능 호출이 완료될 때까지 동루틴 실행이 일시 중단됩니다. 이 일시 중단을 사용하면 코루틴이 일시 중단되는 동안 일부 결과를 „대기”하는 동안 다른 작업을 완료할 수 있습니다. 일반적으로 이 결과는 데이터베이스 요청이나 HTTP 요청과 같은 일종의 I/O입니다. 이러한 스레딩 예제의 스크립트는 Python 3.6.4로 테스트되었습니다. 몇 가지 변경 사항으로, 그들은 또한 파이썬 2-urllib이 파이썬의 이 두 버전 사이에서 가장 많이 변경된 것입니다. download_all_sites())는 세션을 생성한 다음 사이트 목록을 차례로 다운로드합니다.

마지막으로 이 프로세스는 다음과 같은 예제에서 동시성의 양을 확인하는 데 만족할 수 있도록 이 프로세스가 얼마나 오래 걸렸는지 인쇄합니다. 이 단일 문은 example2.py 7줄 build_worker_pool 함수에서 한 모든 작업을 처리합니다. 즉, 사용 가능한 작업자의 무리를 만듭니다., 그들은 몇 가지 작업을 수행할 준비가 되도록 그들을 시작, 그들은 쉽게 액세스할 수 있도록 변수에 그들 모두를 저장. 그러나 이에 대해 설명하기 전에 간단한 코드로 이 주제를 시작해 보겠습니다. 병렬 프로그램을 유용하게 만들려면 PC에 얼마나 많은 코어가 있는지 알아야합니다. 파이썬 멀티 프로세싱 모듈을 사용하면 알 수 있습니다. 다음 간단한 코드는 PC의 코어 수를 인쇄합니다. 멀티 프로세싱을 사용하는 데는 몇 가지 단점이 있습니다. 이 간단한 예제에는 실제로 나타나지 않지만 각 프로세서가 독립적으로 작동할 수 있도록 문제를 분할하는 것은 때로는 어려울 수 있습니다. 여러 프로세스를 사용하려면 다중 처리 풀을 만듭니다. 제공하는 맵 메서드를 사용하여 URL 목록을 풀에 전달하여 8개의 새로운 프로세스를 생성하고 각 프로세스를 사용하여 이미지를 병렬로 다운로드합니다.

이것은 진정한 병렬 처리이지만 비용이 함께 제공됩니다. 스크립트의 전체 메모리가 생성되는 각 하위 프로세스에 복사됩니다. 이 간단한 예제에서는 큰 문제가 아니지만 사소한 프로그램에 대한 심각한 오버 헤드가 될 수 있습니다. 이 파이썬 멀티 프로세싱 예제에서는 모든 지식을 병합합니다. 다음은 자식 프로세스에 의해 여러 ctype 개체가 수정되는 예입니다. 프로세스는 스레딩API를 따릅니다. 스레드. 다중 프로세스 프로그램의 사소한 예는 I/O 바인딩 된 문제가 실제로 다중 처리가 존재하는 이유가 아니기 때문에 놀라운 일이 아닙니다.

다음 섹션으로 단계별로 CPU 바인딩 예제를 살펴보면 더 많은 것을 볼 수 있습니다. 동시성의 사전 정의는 동시 발생입니다.