일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바스크립트
- 데이터구조
- 코딩
- 웹개발
- 2
- 소프트웨어공학
- 데이터베이스
- 프로그래밍언어
- 네트워크
- 파이썬
- 딥러닝
- 컴퓨터공학
- 인공지능
- 네트워크보안
- 버전관리
- 컴퓨터과학
- 보안
- Yes
- I'm Sorry
- 머신러닝
- 데이터분석
- 컴퓨터비전
- 클라우드컴퓨팅
- 사이버보안
- 알고리즘
- 소프트웨어
- 프로그래밍
- 빅데이터
- 자료구조
- 데이터과학
- Today
- Total
스택큐힙리스트
다중 처리 풀과 유사한 스레딩 풀? 본문
멀티 프로세싱 모듈의 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과 함께 다른 동시성 처리 기법과 함께 사용하면, 보다 효율적인 병렬 처리를 구현할 수 있습니다.