Vérification pour vider la File d'attente en python multitraitement

J'ai un programme à l'aide de python de paquets de multitraitement et la File d'attente. Un de mes fonctions ont cette structure:

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()

l'idée est que lorsque je tente d'extraire à partir de la file d'attente et il est vide, il faudra lever une exception et terminer la boucle. J'ai donc deux questions:

1) est-ce un coffre-fort idiome? Sont t-il de meilleures façons de le faire?

2) j'ai essayé de trouver quelle est l'exacte exception qui est levée lorsque j'essaie de .get() du vide d'une file d'attente. Actuellement mon programme est d'attraper toutes les exceptions, qui suce quand l'erreur est ailleurs, et je ne reçois que "la fin" du message.

J'ai essayé:

  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

mais j'ai obtenu l'erreur comme si je n'avais pas pris l'exception. Quel est l'exception correcte pour attraper?

OriginalL'auteur Rafael S. Calsaverini | 2011-08-18