解决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程序设计入门(1)基本语法简介
Jun 13 Python
处理Python中的URLError异常的方法
Apr 30 Python
讲解Python中运算符使用时的优先级
May 14 Python
Python之reload流程实例代码解析
Jan 29 Python
python抽取指定url页面的title方法
May 11 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
PHP 数组教程 定义数组
2009/10/23 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python文件去除注释的方法
2015/05/25 Python
使用Python写一个小游戏
2018/04/02 Python
python绘制彩虹图
2019/12/16 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
大学生找工作推荐信范文
2013/11/28 职场文书
煤矿班组长的职责
2013/12/25 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
网吧员工管理制度
2015/08/05 职场文书
2016年父亲节寄语
2015/12/04 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python