解决Python中定时任务线程无法自动退出的问题

作者:hhgood 时间:2022-09-05 22:52:52 

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的地方也要添加创建类的代码。

这样就可以了。

来源:https://blog.csdn.net/hhgood/article/details/80013871

标签:Python,线程,退出
0
投稿

猜你喜欢

  • python聚类算法选择方法实例

    2023-12-01 13:51:11
  • python不使用for计算两组、多个矩形两两间的iou方式

    2021-08-19 19:08:33
  • 全面分析MySQL ERROR 1045出现的原因及解决

    2024-01-19 08:55:41
  • 原生JS封装_new函数实现new关键字的功能

    2023-09-05 00:44:27
  • 解决goland新建项目文件名为红色的问题

    2024-04-25 14:58:49
  • 动易CMS:九个常见的错误原因分析及解决方法(ZT)

    2008-07-01 12:40:00
  • MySQL存储过程中游标循环的跳出和继续操作示例

    2024-01-25 05:32:04
  • VueJs监听window.resize方法示例

    2024-04-29 13:09:41
  • MySQL动态修改varchar长度的方法

    2024-01-17 22:27:10
  • 详解Node.js 中使用 ECDSA 签名遇到的坑

    2024-05-08 09:36:01
  • python numpy 按行归一化的实例

    2023-04-29 09:14:53
  • 层次分析法在matlab上的实现方式

    2022-08-31 08:57:16
  • 详解PyQt5 事件处理机制

    2023-04-06 00:09:34
  • 用JavaScript实现UrlEncode和UrlDecode的脚本代码

    2024-04-10 10:53:47
  • django修改models重建数据库的操作

    2024-01-12 21:58:07
  • 使用Python来做一个屏幕录制工具的操作代码

    2023-11-02 18:57:40
  • Go 通过结构struct实现接口interface的问题

    2024-05-08 10:44:55
  • vue实现表单录入小案例

    2024-05-09 15:11:07
  • JavaScript实现切换多张图片

    2024-04-17 09:54:18
  • Python3简单爬虫抓取网页图片代码实例

    2021-08-28 21:56:49
  • asp之家 网络编程 m.aspxhome.com