python threading timer 退出_解决Python中定时任务线程无法自动退出的问题
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 threading timer 退出_解决Python中定时任务线程无法自动退出的问题相关推荐
- python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题
python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子 ...
- python画指数函数图像_解决python中的幂函数、指数函数问题
最近在调代码,碰到幂函数.指数函数,总是提示 ValueError: math domain error ValueError: negative number cannot be raised to ...
- python opencv 内存泄露_解决python中显示图片的plt.imshow plt.show()内存泄漏问题
当要处理批量图片,且每张图片都要进行显示时,用plt.imshow() plt.show()会出现内存泄漏, 管理器中看到其中一个python进程的内存不断上涨,目前有找到解决方法 from matp ...
- python mysql写入速度加快_解决python写入mysql中datetime类型遇到的问题
解决python写入mysql中datetime类型遇到的问题 发布时间:2020-08-31 16:46:47 来源:脚本之家 阅读:89 作者:WilliamDescant 刚开始使用python ...
- python图片显示中文_解决Python pandas plot输出图形中显示中文乱码问题
解决方式一: import matplotlib #1. 获取matplotlibrc文件所在路径 matplotlib.matplotlib_fname() #Out[3]: u'd:\\Anaco ...
- sum函数python后面很多小数_解决Numpy中sum函数求和结果维度的问题
使用Numpy(下面简称np)中的sum函数对某一维度求和时,由于该维度会在求和后变成一个数,所以所得结果的这一维度为空. 比如下面的例子: a = np.array([[1,2,3],[4,5,6] ...
- python字符串拼接数字_解决Python中字符串和数字拼接报错的方法
解决Python中字符串和数字拼接报错的方法 前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错. 如以下的代码: # co ...
- python光标变粗_解决IDEA中不能正常输入光标变粗的问题
解决IDEA中不能正常输入光标变粗的问题 遇到的问题 解决方法 win7: insert键切回 win10: fn+insert切回 Mac: fn+i 切回 到此这篇关于解决IDEA中不能正常输入光 ...
- python sub 不区分大小写_解决Python列表字符不区分大小写的问题
有时候,我们需要检测一个元素是否已经存在列表中,并且不区分大小写,如:列表已有元素Mary,那我们想认为MARY也已经被占用.这个例子在实际编程中会用到很多,比如保证网站注册用户独一无二.邮件姓名独一 ...
最新文章
- spring-gateway(一)Reactor编程基础
- java 关于String
- gtkpod 0.99.8
- 【视频课】一课彻底掌握深度学习人脸图像算法,长期更新
- Maven使用详解视频课程——笔记(一)
- 基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜
- jQuery-DOM操作
- 办公自动化-world转pdf-0223
- 如何拥有一个属于自己的网站
- linux修改重传次数,《关于TCP SYN包的超时与重传》——那些你应该知道的知识(四)...
- [JZOJ3987]Tree
- dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
- 二维码图片如何快速生成
- 朱松纯:初探计算机视觉三个源头兼谈人工智能
- unity实现图片轮播效果_Unity 制作图片轮播功能
- 现代经商赚钱必备36计(1)
- Android耗电原理及飞书耗电治理
- 有关于取证的笔记——包含详细例题解析
- Android中访问sdcard路径的几种方式
- LUA语言教程 [转]