개발 꿀팁/PYTHON

파이썬 스레드 풀입니다

Jammie 2023. 2. 6. 14:18
반응형

Python은 스레드 풀의 역할을 설정할 수 있습니다.

설정된 스레드를 미리 켭니다.스레드가 종료된 후에도 프로그램은 해당 스레드를 계속 사용할 수 있습니다.

여러 개의 스레드를 켜서 시스템이 충돌하지 않도록 최대 스레드 수를 설정합니다.

유휴 시간이 많은 프로세스에서 다중 스레드를 구성하면 프로그램이 병렬로 처리되고 처리 속도가 향상될 수 있습니다.


스레드 풀의 기본 클래스는 concurrent.futures 모듈의 Executor이며 Executor는 ThreadPoolExecutor와 ProcessPoolExecutor의 두 가지 하위 클래스를 제공하며, 여기서 ThreadPoolExecutor는 스레드 풀을 생성하는 데 사용되며 ProcessPoolExecutor는 프로세스 풀을 생성하는 데 사용됩니다.

파이썬(Python)의 스레드는 GIL 잠금이 있기 때문에 싱글 코어입니다.
파이썬의 프로세스는 각각 독립적인 GIL 잠금 장치가 있기 때문에 멀티코어이지만, 각각 독립적으로 메모리 공간을 할당해야 하므로 공간을 많이 차지합니다.

스레드 풀을 사용하여 스레드 작업을 수행하는 단계는 다음과 같습니다.

ThreadPoolExecutor 클래스의 생성자를 불러 스레드 풀을 만듭니다.
스레드 작업으로 일반 함수를 정의합니다.
스레드 작업을 제출하기 위해 ThreadPoolExecutor 개체의 submit() 메서드를 호출합니다.
ThreadPoolExecutor 개체의 shutdown(wait = True) 메서드를 호출하여 스레드 풀을 닫습니다

def fun(index):
	print(index)
	time.sleep(3)
	
from concurrent.futures import ThreadPoolExecutor
theard_pool = ThreadPoolExecutor(max_workers=2)
for i in range(1000):
	thread_pool.submit(fun, i)
thread_pool.shutdown(wait= True)

몇 가지 질문이 있습니다.

논리적으로 말하면, 반드시 엄격하고 질서 있는 것을 보장할 수 있는 것은 아니다.
모든 작업을 큐에 던져 구현하기 때문에 tb급 데이터를 처리할 때 오버플로우가 발생합니다??(확인 필요)

 

반응형