>백엔드 개발 >파이썬 튜토리얼 >병렬 처리를 위해 Python의 문서화되지 않은 `ThreadPool`을 언제 사용해야 합니까?

병렬 처리를 위해 Python의 문서화되지 않은 `ThreadPool`을 언제 사용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-12 17:45:15170검색

When Should I Use Python's Undocumented `ThreadPool` for Parallel Processing?

멀티프로세싱의 스레드 기반 풀링

멀티프로세싱 모듈은 별도의 프로세스를 사용하여 작업을 병렬화하기 위한 강력한 "풀" 클래스를 제공합니다. 그러나 이 접근 방식은 프로세스 생성으로 인해 오버헤드가 발생합니다. 실제 함수 호출 중에 릴리스된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.