python线程自动停止了(解决Python中定时任务线程无法自动退出的问题)
类别:脚本大全 浏览量:2669
时间:2022-03-28 16:58:13 python线程自动停止了
解决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中定时任务线程无法自动退出的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/hhgood/article/details/80013871
您可能感兴趣
- python抽奖转盘代码(详解python--模拟轮盘抽奖游戏)
- 如何用python编写抽奖(详解用python写一个抽奖程序)
- python转换doc到pdf(利用python将图片版PDF转文字版PDF)
- pythonexcel生成报表(python生成每日报表数据Excel并邮件发送的实例)
- pythonsocket详细用法(Python中的Socket 与 ScoketServer 通信及遇到问题解决方法)
- python3.7标准库官方手册(Python3.7 dataclass使用指南小结)
- python最简单实例(Python文件打开方式实例详解a、a+、r+、w+区别)
- pythonjson格式化原理(详解pythonstr与json类型转换)
- python协程结果(深入浅析python 协程与go协程的区别)
- python群聊提示(python-itchat 统计微信群、好友数量,及原始消息数据的实例)
- python编写pygame游戏怎么打包(python使用pygame模块实现坦克大战游戏)
- pyqt一键部署python环境(python使用PyQt5的简单方法)
- python怎么自动生成报告(python根据文章标题内容自动生成摘要的实例)
- python 自定义获取文件目录(Python使用os.listdir和os.walk获取文件路径与文件下所有目录的方法)
- python自动处理图片(python制作图片缩略图)
- python无法拒绝的表白代码教程(很酷的python表白工具 你喜欢我吗)
- 盘古开天地 他创造了世界,谁创造了盘古 盘古是伏羲吗(盘古开天地他创造了世界)
- 关于队徽 你了解这些么 二(关于队徽你了解这些么)
- 冬天来了手脚冰凉 真不是因为上辈子你是折翼的天使(冬天来了手脚冰凉)
- 0 1 岁婴儿最强作息指南,照着做养出天使宝宝(01岁婴儿最强作息指南)
- 沪上这16所高校 萌新 礼包开箱 哪一款让你心动(沪上这16所高校萌新)
- 她救了被绑架的他,而这一切竟是一场阴谋...(她救了被绑架的他)
热门推荐
- ajax回调函数不执行
- formdata上传图片参数(data:image data url 文件转为Blob上传后端的方法)
- python画图教程(详解用Python练习画个美队盾牌)
- SqlServer2016模糊匹配的三种方式及效率问题简析(SqlServer2016模糊匹配的三种方式及效率问题简析)
- apache服务配置详解(APACHE 多站点配置方法)
- dedecms图集功能(DEDECMS给图集图片加上自动编号教程)
- 微信发送镭射效果代码(JS实现微信"炸屎"大作战功能)
- SQL中的cast()函数
- sqlserver存储删除过程(Sql中存储过程的定义、修改和删除操作)
- mysqlgroupby语句实现原理(Mysql中错误使用SQL语句Groupby被兼容的情况)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9