解决Python中定时任务线程无法自动退出的问题


Posted in Python onFebruary 18, 2019

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的地方也要添加创建类的代码。

这样就可以了。

以上这篇解决Python中定时任务线程无法自动退出的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中datetime模块参考手册
Jan 13 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
Dec 09 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
Flask实现跨域请求的处理方法
Sep 27 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
Python 日志logging模块用法简单示例
Oct 18 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
python入门之井字棋小游戏
Mar 05 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 #Python
对Python3使运行暂停的方法详解
Feb 18 #Python
解决python线程卡死的问题
Feb 18 #Python
Python中时间datetime的处理与转换用法总结
Feb 18 #Python
对python中的try、except、finally 执行顺序详解
Feb 18 #Python
python调用matlab的m自定义函数方法
Feb 18 #Python
在Python文件中指定Python解释器的方法
Feb 18 #Python
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
用PHP读取IMAP邮件
2006/10/09 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
javascript抖动元素的小例子
2013/10/28 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
Python pass 语句使用示例
2014/03/11 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Python如何实现的二分查找算法
2020/05/27 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
新员工培训个人的自我评价
2013/10/09 职场文书
外企办公室竞聘演讲稿
2013/12/29 职场文书
新年主持词
2014/03/27 职场文书
关于诚信的活动方案
2014/08/18 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
师德师风自查总结
2014/10/14 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
党建工作汇报材料
2014/12/24 职场文书
教师年度考核个人总结
2015/02/12 职场文书
遗失说明具结保证书
2015/02/26 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书