2009-06-12 8 views

Respuesta

13

Como se mencionó, un contenedor alrededor de la clase Thread podría atrapar ese estado. Aquí hay un ejemplo.

>>> from threading import Thread 
>>> class MyThread(Thread): 
    def run(self): 
     try: 
      Thread.run(self) 
     except Exception as self.err: 
      pass # or raise 
     else: 
      self.err = None 


>>> mt = MyThread(target=divmod, args=(3, 2)) 
>>> mt.start() 
>>> mt.join() 
>>> mt.err 
>>> mt = MyThread(target=divmod, args=(3, 0)) 
>>> mt.start() 
>>> mt.join() 
>>> mt.err 
ZeroDivisionError('integer division or modulo by zero',) 
-1

Puede establecer alguna variable global a 0 si tiene éxito, o no es cero si hubo una excepción. Esta es una convención bastante estándar.

Sin embargo, deberá proteger esta variable con un mutex o semáforo. O puede asegurarse de que solo un hilo lo escriba y todos los demás lo lean.

+0

0 para el éxito puede ser una convención bastante estándar, pero ¿no sería un booleano 'succeded' ser un poco más fácil en el intérprete de carne? –

+0

No tiene que ser global si subclase Thread, solo necesito una variable miembro para indicar el éxito. Me preguntaba si hay alguna forma integrada de hacerlo, como el código de salida del proceso. –

+5

Hilos y estado global. Dos grandes gustos que tate gsrat eogetherrrrrrrrrrrrrrr Fallo de segmentación, núcleo volcado. – Glyph

0

Haga que su función de hilo detecte excepciones. (Puede hacerlo con una función de envoltura simple que solo llama a la función de hilo antiguo dentro de un try ... except o try ... except ... else bloque). Entonces la pregunta simplemente se convierte en "cómo pasar información de un hilo a otro", y supongo que ya sabes cómo hacerlo.

Cuestiones relacionadas