2011-06-27 34 views
13

Herhangi bir nedenle Queue.Empty kural dışı durumuna erişemiyorum - burada neyi yanlış yapıyorum?Queue.Empty'ye erişilemiyor: "AttributeError: 'function' nesnesi 'Empty' özelliğine sahip değil"

from multiprocessing import Process, Queue 

# ... 

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

yığıtı:

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' 

cevap

25

Queue.Empty istisna multiprocessing.queues.Queue sınıfında, sıra modülü bulunmaktadır.

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

çok açık ve ayrıntılı olmasını istiyorsanız, bunu yapabilirsiniz: Eski yaklaşım tercih sebebi

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

muhtemelen olan çoklu işlem modülü aslında Kuyruk (modülü) Boş istisna sınıfı kullanır daha iyi bir fikir çünkü endişelenmeniz gereken tek bir Queue nesnesi var ve ikinci örneğimde olduğu gibi sınıf veya modül ile çalışıp çalışmadığınızı merak etmek zorunda değilsiniz.

+0

Şimdi görüyorum, Queue'yi içe aktarma, sınıfı değil, modülü almayı düşündüm. Teşekkürler! – Ross

+1

daha da ilginç - çok işlemcili içe aktarma Queue öğesinden içe aktarma, Queue işlevini, çoklu işlem sırasında Queue sınıfını multirocessing.queues alt modülünden döndüren "__init __. Py" uygulamasından alır. Ördek yazarak ve ad alanlarını ilginç programlama yapmak! – underrun

İlgili konular