解决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的chardet库获得文件编码并修改编码
Jan 22 Python
python实现的一个p2p文件传输实例
Jun 04 Python
python记录程序运行时间的三种方法
Jul 14 Python
python3 判断列表是一个空列表的方法
May 04 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
python 发送json数据操作实例分析
Oct 15 Python
Python识别html主要文本框过程解析
Feb 18 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
详解Python 中的容器 collections
Aug 17 Python
浅析python中的del用法
Sep 02 Python
python中的split、rsplit、splitlines用法说明
Oct 23 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
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
使用js如何实现全选与全不选
2013/12/30 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
vue综合组件间的通信详解
2017/11/06 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
Python面向对象之继承代码详解
2018/01/29 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
对Python中的@classmethod用法详解
2018/04/21 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
《燕子专列》教学反思
2014/02/21 职场文书
毕业生就业协议书
2014/04/11 职场文书
领导干部对照检查材料
2014/08/24 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
房产遗嘱范本
2015/08/06 职场文书
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript