gpt4 book ai didi

python - 多线程时以编程方式退出python脚本

转载 作者:行者123 更新时间:2023-11-28 22:53:49 24 4
gpt4 key购买 nike

我有一些常规运行的代码,但时不时地(比如一个月一次)程序似乎卡在某个地方,我不确定在哪里。

我想我会实现 [结果证明不完全] 一个检查程序运行了多长时间的“快速修复”。我决定使用多线程来调用该函数,然后在它运行时检查时间。

例如:

import datetime
import threading

def myfunc():
#Code goes here

t=threading.Thread(target=myfunc)
t.start()
d1=datetime.datetime.utcnow()
while threading.active_count()>1:
if (datetime.datetime.utcnow()-d1).total_seconds()>60:
print 'Exiting!'
raise SystemExit(0)

但是,这不会关闭另一个线程 (myfunc)。

杀死其他线程的最佳方法是什么?

最佳答案

文档可以更清楚地说明这一点。引发 SystemExit 告诉解释器退出,但“正常”退出处理仍然完成。正常退出处理的一部分是 .join() - 所有事件的非守护线程。但是你的流氓线程永远不会结束,所以退出处理永远等待加入它。

正如@roippi所说,你可以做到

t.daemon = True

开始之前。正常的退出处理等待守护线程。当主进程退出时,您的操作系统应该杀死它们。

另一种选择:

import os
os._exit(13) # whatever exit code you want goes there

这会“立即”停止解释器,并跳过所有正常的退出处理。

选择你的毒药 ;-)

关于python - 多线程时以编程方式退出python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com