스택큐힙리스트

다중 처리 풀과 유사한 스레딩 풀? 본문

카테고리 없음

다중 처리 풀과 유사한 스레딩 풀?

스택큐힙리스트 2023. 4. 2. 20:06
반응형

멀티 프로세싱 모듈의 Pool class와 유사한 워커 스레드용 풀 클래스가 있나요?

저는 예를 들어 map 함수를 병렬 처리하기 쉬운 것이 좋습니다.

def long_running_func(p):

c_func_no_gil(p)

p = multiprocessing.Pool(4)

xs = p.map(long_running_func, range(100))

하지만 새로운 프로세스를 만드는 부담없이 하고 싶습니다.

저는 GIL에 대해 알고 있습니다. 하지만 제 경우, 해당 함수는 IO-bound C 함수로, 파이썬 래퍼는 실제 함수 호출 전에 GIL을 해제할 것입니다.

제 자신의 스레딩 풀을 작성해야 하나요?

답변 1

나는 방금 multiprocessing 모듈에서 실제로 스레드 기반 풀 인터페이스가 있다는 것을 알아냈지만, 그것은 어느 정도 숨겨져 있으며 적절하게 문서화되어 있지 않습니다.

이것은 가져올 수 있습니다.

from multiprocessing.pool import ThreadPool

이는 파이썬 스레드를 래핑하는 가짜 Process 클래스를 사용하여 구현됩니다. 이 스레드 기반 Process 클래스는 multiprocessing.dummy 에서 찾을 수 있으며, docs 에 간단히 언급됩니다. 이 가짜 모듈은 스레드를 기반으로한 전체 멀티프로세싱 인터페이스를 제공한다고 합니다.

답변 2

쓰레드 풀: multiprocessing Pool과 유사한 것

쓰레드 풀(threading pool)은 파이썬에서 쓰레드 기반 프로그래밍으로 동시성(concurrency)을 처리하기 위한 기법입니다. multiprocessing Pool과 유사하지만, 쓰레드를 이용하여 동시성을 처리하는 점이 다릅니다.

쓰레드는 더 작은 규모의 작업에 더 적합하며, 여러 개의 작은 작업을 동시에 처리할 수 있습니다. multiprocessing Pool은 프로세스를 이용하여 동시성을 처리하는데, 전체 프로세스의 복잡성 때문에 쓰레드보다 더 무겁고 느릴 수 있습니다.

쓰레드 풀을 이용하면, 작업자 스레드(worker thread)를 관리하여 작업을 분배하고 동시에 처리할 수 있습니다. 이는 multiprocessing Pool과 마찬가지로 프로그래밍에서 병렬 처리(parallel processing)를 구현하는 데 매우 유용합니다.

또한, 쓰레드 풀을 사용하면 작업자 스레드를 재사용할 수 있으므로, 작업자 스레드를 생성하는 데 필요한 시간과 비용을 절약할 수 있습니다.

쓰레드 풀은 다중 쓰레드 환경에서 사용되고, 이러한 환경에서 발생할 수 있는 경쟁 상태(race condition)와 같은 문제를 방지하기 위해 적절한 동기화(synchronization) 기술을 사용해야 합니다.

쓰레드 풀은 파이썬 프로그래밍에서 동시성 처리를 위한 유용한 도구 중 하나입니다. multiprocessing Pool과 함께 다른 동시성 처리 기법과 함께 사용하면, 보다 효율적인 병렬 처리를 구현할 수 있습니다.

반응형
Comments