파이썬의 패키지 다중 처리 및 큐를 사용하는 프로그램이 있습니다. 내 기능 중 하나는이 구조를 가지고 :파이썬 다중 처리에서 빈 큐 확인
from multiprocessing import Process, Queue
def foo(queue):
while True:
try:
a = queue.get(block = False)
doAndPrintStuff(a)
except:
print "the end"
break
if __name__ == "__main__"
nthreads = 4
queue = Queue.Queue()
# put stuff in the queue here
for stuff in moreStuff:
queue.put(stuff)
procs = [Process(target = foo, args = (queue,)) for i in xrange(nthreads)]
for p in procs:
p.start()
for p in procs:
p.join()
생각 나는 큐에서 추출하려고이 비어있을 때, 그것은 예외를 발생하고, 루프를 종료 할 것이라는 점이다. 그래서 두 가지 질문이 있습니다 :
1) 이것은 안전한 관용구입니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?
2) 빈 큐에서 .get()
을 시도 할 때 발생하는 정확한 예외가 무엇인지 찾으려고 노력했습니다. 현재 나의 프로그램은 모든 예외를 잡아 내고 있으며, 오류가 다른 곳에서 발생하면 "나는 끝"메시지 만 받는다.
import Queue
queue = Queue.Queue()
[queue.put(x) for x in xrange(10)]
try:
print queue.get(block = False)
except Queue.Empty:
print "end"
break
하지만 난 예외를 잡은 않은 것처럼 나는 오류가 발생했습니다. 잡을 올바른 예외는 무엇입니까?
험! 감사! 나는 다른 패키지에서 물건을 가져와야한다는 것을 몰랐다. 이제 작동합니다. –