我的一些工作线程遇到问题。我在线程的 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
。由于这种方法,我发现了一些很大的小错误,但我的问题是工人仍然在死亡,我不知道如何进一步记录正在发生的事情或排除故障。
任何想法将不胜感激。
Thanks!
你可以尝试检查使用以下命令跟踪程序的执行情况trace module http://docs.python.org/library/trace.html。例如:
% python -m trace -c -t -C ./coverage test_exit.py
Source:
import sys
import threading
class Worker(object):
def run(self):
try:
sys.exit(1)
except:
print sys.exc_info()
threading.Thread(target=Worker().run).start()
它会在执行时转储每一行,您应该在coverage
目录:
...
threading.py(482): try:
threading.py(483): if self.__target:
threading.py(484): self.__target(*self.__args, **self.__kwargs)
--- modulename: test_exit, funcname: run
test_exit.py(7): try:
test_exit.py(8): sys.exit(1)
test_exit.py(9): except:
test_exit.py(10): print sys.exc_info()
(<type 'exceptions.SystemExit'>, SystemExit(1,), <traceback object at 0x7f23098822d8>)
threading.py(488): del self.__target, self.__args, self.__kwargs
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)