解决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 自动安装 Rising 杀毒软件
Apr 24 Python
python有证书的加密解密实现方法
Nov 19 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Python浅拷贝与深拷贝用法实例
May 09 Python
Python类的动态修改的实例方法
Mar 24 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
Python matplotlib画曲线例题解析
Feb 07 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
解决pytorch 保存模型遇到的问题
Mar 03 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+MySQL实现的简单投票系统实例
2016/02/24 PHP
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python多进程同步简单实现代码
2016/04/27 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
python+os根据文件名自动生成文本
2019/03/21 Python
python opencv摄像头的简单应用
2019/06/06 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
使用Python函数进行模块化的实现
2019/11/15 Python
如何理解Python中的变量
2020/06/01 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
总账会计岗位职责
2015/04/02 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
合作协议书格式范本
2016/03/21 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
Python合并pdf文件的工具
2021/07/01 Python
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers