. 이 경우 괜찮 - 때문에 CPython과의 아키텍처 (즉 Global Interpreter Lock) 효과적으로 하나 개의 스레드 만 어쨌든 한 번에 실행해야합니다으로,
from threading import Thread, Lock
mutex = Lock()
def processData(data):
mutex.acquire()
try:
print('Do some stuff')
finally:
mutex.release()
while True:
t = Thread(target = processData, args = (some_data,))
t.start()
그러나주의 : 파이썬 방법 사용이 매우 간단하다 I/O 바운드 스레드가 다른 스레드가 실행되는 것을 차단하지 않도록 잠금 장치를 최대한 많이 해제하려고 할지라도 다수의 I/O 바운드가 있습니다.
파이썬 2.6 이상에서는 파이썬의 multiprocessing
패키지를 사용합니다. threading
패키지를 반영하지만 완전히 새로운 프로세스를 만들 것입니다. 동시에 실행할 수 있습니다.
from multiprocessing import Process, Lock
mutex = Lock()
def processData(data):
with mutex:
print('Do some stuff')
if __name__ == '__main__':
while True:
p = Process(target = processData, args = (some_data,))
p.start()
당신이하려고하는 것을 파악하기가 매우 어렵다 해야 할 것. 귀하의 의도를보다 자세히 설명해야합니다. –
@Marcelo Cantos, 죄송합니다. 아마도 맞을 것입니다. processData의 코드를 새 트레드에서 시작하고 싶습니다. 난 단지 한 스레드가 한 번에 데이터를 처리 할 수 있고 데이터를 처리하기 위해 어떤 데이터를 전송했는지를 원합니다. 다른 스레드가 대기열에있는 동안 루핑을 유지하는 기본 while 루프를 원합니다. – Richard
@ 리차드 : 어쨌든 모든 처리를 직렬화하려는 경우 왜 스레드를 사용하고 싶습니까? 간단한 루프의 문제점은 무엇입니까? 또한, 왜 당신은 메인 스레드가 계속 반복 되길 원합니 까? 그것은 단지 CPU를 태우고 다른 스레드를 굶주리게 할 것입니다. –