>백엔드 개발 >파이썬 튜토리얼 >multiprocessing.Pool 대신 Python의 ThreadPool을 언제 사용해야 합니까?

multiprocessing.Pool 대신 Python의 ThreadPool을 언제 사용해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 09:35:09396검색

When Should I Use Python's ThreadPool Instead of multiprocessing.Pool?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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