Python의 스레딩 풀: 멀티프로세싱 풀의 대안
멀티프로세싱 모듈의 Pool 클래스는 작업자 프로세스를 사용하여 코드를 병렬화하는 편리한 방법을 제공합니다. . 그러나 특정 사용 사례에서는 프로세스 대신 스레드를 활용하는 것이 바람직할 수 있습니다. 이 문서에서는 다중 처리 모듈 내에서 사용할 수 있는 대체 스레드 기반 풀 인터페이스를 살펴봅니다.
문제 설명:
사용자가 "풀" 클래스를 제공하는 Python 라이브러리를 찾고 있습니다. 다중 처리 모듈의 Pool 클래스와 유사한 스레딩 작업자 프로세스의 경우. 이렇게 하면 다중 처리 풀을 사용하여 다음 예와 유사한 작업을 쉽게 병렬화할 수 있습니다.
def long_running_func(p): c_func_no_gil(p) p = multiprocessing.Pool(4) xs = p.map(long_running_func, range(100))
그러나 사용자는 새 프로세스 생성과 관련된 오버헤드를 피하고 싶어합니다.
해결책:
다중 처리 모듈에는 살펴볼 가치가 있는 스레드 기반 풀 인터페이스가 포함되어 있습니다. 잘 알려지지 않은 이 인터페이스는 multiprocessing.pool 모듈의 ThreadPool 클래스를 사용하여 가져올 수 있습니다.
from multiprocessing.pool import ThreadPool
뒤에서 이 ThreadPool 클래스는 Python 스레드를 래핑하는 더미 Process 클래스를 활용합니다. 이 더미 Process 클래스는 스레드 기반의 완전한 다중 처리 인터페이스를 제공하는 multiprocessing.dummy 모듈에서 구현됩니다.
사용 예:
ThreadPool을 사용하려면 인스턴스화하세요. 원하는 수의 작업자 스레드가 있는 ThreadPool 객체. 그런 다음 맵 메소드를 호출하여 작업자 스레드 전체에서 함수를 병렬화합니다.
# Create a ThreadPool with 4 worker threads pool = ThreadPool(4) # Parallelize the `long_running_func` on 100 inputs results = pool.map(long_running_func, range(100))
위 내용은 multiprocessing.Pool 대신 Python의 ThreadPool을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!