멀티프로세싱의 스레드 기반 풀링
멀티프로세싱 모듈은 별도의 프로세스를 사용하여 작업을 병렬화하기 위한 강력한 "풀" 클래스를 제공합니다. 그러나 이 접근 방식은 프로세스 생성으로 인해 오버헤드가 발생합니다. 실제 함수 호출 중에 릴리스된 GIL을 사용한 IO 바인딩 작업의 경우 스레드를 사용하면 더 나은 성능을 얻을 수 있습니다.
ThreadPool 클래스 소개
일반적인 믿음과는 달리, multiprocessing 모듈은 실제로 스레드 기반 풀 인터페이스를 제공합니다. from multiprocessing.pool import ThreadPool을 통해 액세스할 수 있는 이 숨겨진 보석은 스레드를 사용하여 작업을 병렬화하는 편리한 방법을 제공합니다.
문서화되지 않은 상태에도 불구하고 ThreadPool 클래스는 Python을 래핑하는 더미 Process 클래스를 사용하여 다중 처리 풀 인터페이스를 구현합니다. 스레드. 이 더미 Process 클래스는 스레드 기반의 전체 다중 처리 인터페이스를 제공하는 multiprocessing.dummy 모듈에 있습니다.
사용 예
ProcessPool과 유사하게 ThreadPool은 다음을 수행할 수 있습니다. 지도를 병렬화하는 데 사용됩니다. 기능:
import multiprocessing.pool def long_running_func(p): c_func_no_gil(p) p = multiprocessing.pool.ThreadPool(4) xs = p.map(long_running_func, range(100))
참고: ThreadPool 클래스는 모든 경우, 특히 작업에 상당한 CPU 시간이 필요한 경우 ProcessPool만큼 효율적이지 않습니다.
위 내용은 병렬 처리를 위해 Python의 문서화되지 않은 `ThreadPool`을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!