Python线程退出代码
Posted
技术标签:
【中文标题】Python线程退出代码【英文标题】:Python thread exit code 【发布时间】:2009-06-12 13:23:42 【问题描述】:有没有办法判断线程是正常退出还是异常退出?
【问题讨论】:
【参考方案1】:如前所述,Thread 类的包装器可以捕获该状态。这是一个例子。
>>> from threading import Thread
>>> class MyThread(Thread):
def run(self):
try:
Thread.run(self)
except Exception as err:
self.err = err
pass # or raise err
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',)
【讨论】:
【参考方案2】:如果成功,您可以将某个全局变量设置为 0,如果出现异常,则可以将其设置为非零。这是一个非常标准的约定。
但是,您需要使用互斥锁或信号量来保护此变量。或者您可以确保只有一个线程会写入它,而所有其他线程只会读取它。
【讨论】:
0 表示成功可能是一个非常标准的约定,但布尔值succeded
在肉类解释器上不是更容易一些吗?
如果我继承Thread,它不必是全局的,只需要一个成员变量来表示成功。我只是想知道是否有任何内置方法可以做到这一点,比如进程退出代码。
线程和全局状态。两个伟大的品味 tate gsrat eogetherrrrrrrrrrrrrrr 分段错误,核心转储。
@Glyph 请注意我是如何提到互斥锁和信号量的。【参考方案3】:
让你的线程函数捕获异常。 (您可以使用一个简单的包装函数来执行此操作,该函数只调用 try
...except
或 try
...except
...else
块内的旧线程函数)。那么问题就变成了“如何将信息从一个线程传递到另一个线程”,我想你已经知道该怎么做了。
【讨论】:
以上是关于Python线程退出代码的主要内容,如果未能解决你的问题,请参考以下文章
为啥 sys.exit() 在 Python 的线程内调用时不退出?
当其中一个线程中存在未捕获的异常时,Python 多线程程序不会退出
进程以退出代码 -1073741819 (0xC0000005) Python Tkinter GUI Canvas 更新完成