【发布时间】:2011-05-04 15:30:50
【问题描述】:
我的一些工作线程有问题。我在线程的 run 方法中添加了一个包罗万象的异常语句,如下所示:
try:
"""Runs the worker process, which is a state machine"""
while self._set_exitcode is None :
assert self._state in Worker.STATES
state_methodname = "_state_%s" % self._state
assert hasattr(self, state_methodname)
state_method = getattr(self, state_methodname)
self._state = state_method() # execute method for current state
self._stop_heartbeat()
sys.exit( self._set_exitcode )
except:
self.log.debug(sys.exc_info())
我读到这是捕获可能导致问题的所有内容的事实上的方法,而不是使用Exception, e。由于这种方法,我发现了一些很棒的小错误,但我的问题是工人仍在死亡,我不确定如何进一步记录正在发生的事情或排除故障。
任何想法将不胜感激。
谢谢!
【问题讨论】:
-
“而不是使用异常”是什么意思?
-
@Jon - 他的意思不是专门捕获异常派生的对象。使用裸异常,您还将捕获不是从异常派生的 BaseException 对象(例如 - KeyboardInterrupt)。您还将捕获由非异常对象引发的异常(糟糕)。
-
啊,很公平。我第一次读的时候错过了句尾的
, e。 -
是什么让你想到 - 一个线程正在死去?也许它只是被阻止或正常退出?
-
我接手了一个职位,我们有一个渲染农场,其中所有的工作人员都是状态机,不应该死,而是闲置等待一个 amimn 进程分配更多的工作。 @Turnaev
标签: python multithreading