解决Python中定时任务线程无法自动退出的问题
Python  /  管理员 发布于 7年前   216
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 Timergflag=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的地方也要添加创建类的代码。
这样就可以了。
以上这篇解决Python中定时任务线程无法自动退出的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号