Necesito pasar excepciones a través de un límite de subproceso.Cómo paso una excepción entre subprocesos en python
Estoy usando python incrustado en una aplicación que no es segura para la ejecución de subprocesos y que tiene una llamada segura para subprocesos, post_event (invocable), que llama a las llamadas desde su subproceso principal.
Estoy ejecutando un guion pygtk en un hilo separado, por lo que cuando se hace clic en un botón publico un evento con post_event, y espero a que termine antes de continuar. Pero necesito que la persona que llama sepa si el destinatario lanzó una excepción, y la levantará si es así. No estoy demasiado preocupado por el rastreo, solo la excepción en sí misma.
Mi código es más o menos:
class Callback():
def __init__(self,func,*args):
self.func=func
self.args=args
self.event=threading.Event()
self.result=None
self.exception=None
def __call__(self):
gtk.gdk.threads_enter()
try:
self.result=self.func(*self.args)
except:
#what do I do here? How do I store the exception?
pass
finally:
gtk.gdk.threads_leave()
self.event.set()
def post(self):
post_event(self)
gtk.gdk.threads_leave()
self.event.wait()
gtk.gdk.threads_enter()
if self.exception:
raise self.exception
return self.result
Cualquier ayuda apreciada, gracias.
Exactamente lo que estaba buscando, gracias. Normalmente usaría colas, etc., pero estoy 'reinventando la rueda' porque solo una cosa debería estar ejecutándose en un momento dado en mi script, y quiero cosas que se ejecuten en el hilo de la aplicación para finalizar y dar me resulta un resultado antes de tomar cualquier medida adicional en el hilo gtk. Básicamente estoy tratando de falsificar subprocesos individuales con dos hilos. Es molesto, pero parece estar funcionando bien. – DaedalusFall