我有一个使用Python的multiprocessing和Queue包的程序。我的一个函数具有以下结构:
“这个想法是,当我尝试从队列中提取数据时,如果队列为空,它会引发一个异常并终止循环。所以我有两个问题:
但我收到了错误,就好像我没有捕获异常一样。应该捕获什么样的异常才是正确的?
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)我试图找出在尝试从空队列中获取数据时引发的确切异常是什么。目前,我的程序捕获所有异常,当错误发生在其他地方时,只能得到一个“结束”的消息,这很糟糕。
我尝试了:
” 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
但我收到了错误,就好像我没有捕获异常一样。应该捕获什么样的异常才是正确的?