22

Python에서 병렬 처리를 수행하기위한 옵션은 무엇입니까? 몇 가지 매우 큰 래스터에 대해 CPU 묶음 계산을 수행하고이를 병렬 처리하려고합니다. C 배경에서부터, 병렬 처리에 대한 세 가지 접근법을 잘 알고 있습니다.Python의 병렬 처리

  1. 메시지 전달 프로세스가 클러스터를 통해 배포 될 수 있습니다. MPI. 하나의 pthreads또는 포크를 사용
  2. 명시 공유 메모리 병렬(), 파이프(), 등. al
  3. 암시 적 공유 메모리 병렬 처리, OpenMP 사용.

사용 방법을 결정하는 것은 절충안입니다.

파이썬에서 어떤 접근 방식을 사용할 수 있으며 그 특성은 무엇입니까? 클러스터 가능 MPI 클론이 있습니까? 공유 메모리 병렬 처리를 수행하는 기본 방법은 무엇입니까? GIL의 문제에 대한 참조와 작업 표에 대한 참조는입니다.

즉, 파이썬에서 다른 병렬 처리 전략을 선택하기 전에 무엇을 알아야합니까?

답변

13

일반적으로 CPU 경계 계산을 설명합니다. 이것은 파이썬의 장점이 아닙니다. 역사적으로 다중 처리도 마찬가지입니다.

주류 파이썬 인터프리터에서 스레딩은 두려운 글로벌 잠금에 의해 지배되었습니다. 새로운 multiprocessing API는이를 해결하고 작업자 풀 추상화에 파이프 및 대기열 등을 제공합니다.

C 또는 Cython에 성능 중요 코드를 쓸 수 있으며 접착제로 Python을 사용할 수 있습니다.

5

새로운 (2.6) multiprocessing 모듈을 사용하는 것이 좋습니다. 서브 프로세스를 사용하여 GIL 문제가 발생합니다. 또한 일부 로컬/원격 문제를 추상화하므로 코드를 로컬에서 실행하거나 클러스터를 통해 확산 할 수 있습니다. 위에 링크 된 문서는 씹을 가치가 있지만 시작하기 좋은 기초를 제공해야합니다.

0

Stackless Python에 관심이있을 수 있습니다.

+2

실제로 CPU의 바운드 코드 동시성에는 도움이되지 않습니다. – Antimony

0

그 중 많은 패키지가 있습니다. 다른 말로는 가장 적합한 것은 멀티 프로세싱이며, 특히 "Pool"클래스가 가장 적절합니다.

parallel python으로 비슷한 결과를 얻을 수 있으며 클러스터와 함께 작동하도록 설계되었습니다.

어쨌든 멀티 프로세싱과 관련이 있습니다.

0

처리해야하는 데이터의 양과 사용할 CPU/기계의 수에 따라 일부는 C (Java/C#)로 작성하는 것이 더 나은 경우가 있습니다. 자이 썬/IronPython)

8 개의 CPU에서 병렬로 실행하는 것보다 성능 향상에 더 많은 도움이 될 수 있습니다.