2011-06-27 20 views
13

由于某种原因,我无法访问Queue.Empty异常 - 我在这里做错了什么?无法访问Queue.Empty:“AttributeError:'函数'object has no attribute'Empty'”

from multiprocessing import Process, Queue 

# ... 

try: 
    action = action_queue.get(False) 
    print "Action: " + action 
except Queue.Empty: 
    pass 

堆栈跟踪:

Traceback (most recent call last): 
File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 258, 
    in _bootstrap 
    self.run() 
File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 114, 
    in run 
    self._target(*self._args, **self._kwargs) 
File "D:\Development\populate.py", line 39, in permutate 
    except Queue.Empty: AttributeError: 'function' object has no attribute 'Empty' 

回答

25

的Queue.Empty例外是队列模块中,而不是在multiprocessing.queues.Queue类。多处理模块实际使用队列(模块)空异常类:

from multiprocessing import Queue 
from Queue import Empty 
q = Queue() 
try: 
    q.get(False) 
except Empty: 
    print "Queue was empty" 

如果你想成为非常明确和详细,你可以这样做:

import multiprocessing 
import Queue 
q = multiprocessing.Queue() 
try: 
    q.get(False) 
execpt Queue.Empty: 
    print "Queue was empty" 

有利于前者的做法可能是一个更好的主意,因为只有一个Queue对象需要担心,而且您不必担心是否正在使用类或模块,就像我的第二个示例中那样。

+0

啊我现在看到了,我以为导入Queue导入了模块,而不是类。谢谢! – Ross

+1

它更加有趣 - 从多处理导入“导入队列”在多处理中从'__init __。py'中导入Queue函数,该函数从multiprocessing.queues子模块返回Queue类。鸭子打字和命名空间使有趣的编程! – underrun

相关问题