断线无一例外

2024-09-28 22:24:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一些工作线程出现问题。我在线程的run方法中添加了catchall异常语句,如下所示:

 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。由于这个方法,我发现了一些很好的小错误,但我的问题是工人们仍然在死亡,我不知道如何进一步记录正在发生的事情或排除故障。在

任何想法都将不胜感激。在

谢谢!在


Tags: 方法runselfissysassert语句线程
2条回答

是什么让你认为有些线程过早退出?有没有可能它们正在干净地退出,但您的日志记录方法不是线程安全的?在

{你可以试试看。例如:

% python -m trace -c -t -C ./coverage test_exit.py

资料来源:

^{pr2}$

它将在执行时转储每一行,您应该在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
...

相关问题 更多 >