解决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写的windows服务不能启动的问题
Apr 15 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
python过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Python匹配中文的正则表达式
May 11 Python
Python输出各行命令详解
Feb 01 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
virtualenv隔离Python环境的问题解析
Jun 21 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
几种显示数据的方法的比较
2006/10/09 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
python爬取个性签名的方法
2018/06/17 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
聊聊python中的循环遍历
2020/09/07 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
高中毕业自我鉴定
2013/12/19 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
文明倡议书范文
2014/04/15 职场文书
节约用电标语
2014/06/17 职场文书
计划生育证明书写要求
2014/09/17 职场文书
市场部经理岗位职责
2015/02/02 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python