解决Python中定时任务线程无法自动退出的问题
作者:hhgood 时间:2022-09-05 22:52:52
python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。
from threading import Timer
def scheduletaskwrap():
pritn "in task"
Timer(10, scheduletaskwrap).start()
Timer(10, scheduletaskwrap).start()
象上面这样,就可以每10秒调用一次线程,但是当你退出整个程序后,子线程
scheduletaskwrap
还在继续执行,要通知它退出怎么办?
python的线程模块提供了很多办法,什么event,wait,lock等,这些都比较麻烦不适合这种定时任务的简单方法。
最简单的就是设置一个全局变量,然后在线程中判断它是否改变。
from threading import Timer
gflag=1
def scheduletaskwrap():
global gflag
pritn "in task"
if gflag==1:
Timer(10, scheduletaskwrap).start()
Timer(10, scheduletaskwrap).start()
想象是美好的,你实际运行就会发现,这样行不通,因为主进程退出后,那个全局变量,在子线程中还是1,没有改变,因为python不存在什么退出通知之类的机制。
那没有其他办法了吗?经过思考,既然进程没有退出通知,但是类可以啊,类一般都有析构函数,可以用它来实现全局变量的改变,于是添加了一个类,在析构函数中把全局变量改成0,这样就可以了。
class timerexec():
threadhandle=0
def __init__(self,thandle):
threadhandle=thandle
def __del__(self):
global gflag
gflag=0
print u"线程结束",gflag
threadhandle.cancel
refreshthread=Timer(10, scheduletaskwrap).start()
a=timerexec(refreshthread)
主进程中调用timer的地方也要添加创建类的代码。
这样就可以了。
来源:https://blog.csdn.net/hhgood/article/details/80013871
标签:Python,线程,退出
0
投稿
猜你喜欢
python聚类算法选择方法实例
2023-12-01 13:51:11
python不使用for计算两组、多个矩形两两间的iou方式
2021-08-19 19:08:33
全面分析MySQL ERROR 1045出现的原因及解决
2024-01-19 08:55:41
原生JS封装_new函数实现new关键字的功能
2023-09-05 00:44:27
解决goland新建项目文件名为红色的问题
2024-04-25 14:58:49
动易CMS:九个常见的错误原因分析及解决方法(ZT)
2008-07-01 12:40:00
MySQL存储过程中游标循环的跳出和继续操作示例
2024-01-25 05:32:04
VueJs监听window.resize方法示例
2024-04-29 13:09:41
MySQL动态修改varchar长度的方法
2024-01-17 22:27:10
详解Node.js 中使用 ECDSA 签名遇到的坑
2024-05-08 09:36:01
python numpy 按行归一化的实例
2023-04-29 09:14:53
层次分析法在matlab上的实现方式
2022-08-31 08:57:16
详解PyQt5 事件处理机制
2023-04-06 00:09:34
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2024-04-10 10:53:47
django修改models重建数据库的操作
2024-01-12 21:58:07
使用Python来做一个屏幕录制工具的操作代码
2023-11-02 18:57:40
Go 通过结构struct实现接口interface的问题
2024-05-08 10:44:55
vue实现表单录入小案例
2024-05-09 15:11:07
JavaScript实现切换多张图片
2024-04-17 09:54:18
Python3简单爬虫抓取网页图片代码实例
2021-08-28 21:56:49