python使用threading.Timer实现线程循环任务定时器(一)

在进行爬虫系统开发的过程中遇到需要间隔一段时间就重复执行的任务的需求,就想实现一个线程服务在后台监控数据的抓取状态,要想实现定时循环任务的脚本可以使用linux下的crontab命令来执行,但是在一个常驻进程里不太适用于使用这种办法,所以想启动一个线程来处理这类的小需求。

在查找资料后发现可以使用 threading.Timer来实现这个

代码如下:

def func1():
  print('Do something.')
  global timer
  timer = threading.Timer(3, func1)
  timer.start()

有资料说一定要使用 global 这个关键字,不使用的话会造成线程堆积最终程序退出。

为了证实一下这个说法是否正确,我进行了以下实验:

import threading
def func1(a):
    #Do something
    print('Do something')
    a+=1
    print(a)
    print('当前线程数为{}'.format(threading.activeCount()))
    if a>5:
        return
    t=threading.Timer(5,func1,(a,))
    t.start()

a用来记录func1的执行次数

 

threading.activeCount() #用来显示当前活跃的进程数

结果显示为:

活跃线程数一直保持不变,说明并不会造成线程的堆积。所以使用global关键词是没有必要的。

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值