解决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 添加用户设置密码并发邮件给root用户
Jul 25 Python
浅谈Python的垃圾回收机制
Dec 17 Python
python字符串中的单双引
Feb 16 Python
Python实现的概率分布运算操作示例
Aug 14 Python
python中装饰器级连的使用方法示例
Sep 29 Python
实例讲解Python爬取网页数据
Jul 08 Python
Pycharm配置远程调试的方法步骤
Dec 17 Python
Python变量类型知识点总结
Feb 18 Python
Python对wav文件的重采样实例
Feb 25 Python
python统计文章中单词出现次数实例
Feb 27 Python
解决paramiko执行命令超时的问题
Apr 16 Python
python Django框架快速入门教程(后台管理)
Jul 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
在PHP中使用redis
2013/11/04 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
php实现算术验证码功能
2018/12/05 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
简述Python中的面向对象编程的概念
2015/04/27 Python
python实现K最近邻算法
2018/01/29 Python
python自动12306抢票软件实现代码
2018/02/24 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python如何实现FTP功能
2020/05/28 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
2014组织生活会方案
2014/05/19 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
股东大会通知
2015/04/24 职场文书
红高粱观后感
2015/06/10 职场文书
社会实践心得体会范文
2016/01/14 职场文书