worker thread catching exceptions and putting them in queue

Diez B. Roggisch deets at nospam.web.de
Mon Mar 5 11:49:59 EST 2007


Paul Sijben wrote:

> All,
> 
> in a worker thread setup that communicates via queues is it possible to
> catch exceptions raised by the worker executed, put them in an object
> and send them over the queue to another thread where the exception is
> raised in that scope?
> 
> considering that an exception is an object I feel it ought to be
> possible, however I do not see how to go about it.
> 
> does anyone have a pointer towards the solution?


Just raise the exception object found in the queue. Only make sure it _is_
an exception, as you can raise everything. So in your queue-putting-code
you might consider discriminating between the two cases, like this:


while True:
   try:
      result = 1, work()
   except:
      result = 2, sys.exc_info()[1]
   queue.put(result)

-------
while True:
   kind, result = queue.get()
   if kind == 1:
      do(result)
   elif kind == 2:
      raise result


Diez



More information about the Python-list mailing list