文章内容

2018/9/13 12:26:34,作 者: 黄兵

python 如何定时执行一个任务

最近要做一个爬虫,每10分钟执行一次抓取任务,既然是做爬虫,那肯定是python莫属了。

在python中可以使用:hreading.Timer方法创建一个定时器

class threading.Timer(interval, function, args=[], kwargs={})

创建一个timer,在interval秒过去之后,它将以参数args和关键字参数kwargs运行function 。

调用该函数回返回一个定时器的句柄,同时也获得了一个定时器实例。

但是这时,定时器只是被创建,被没有启动,需要调用实例里面的

start()方法启动定时器。如果在定时过程中想要取消该定时器,需要使用cancel()函数。

具体代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import threading
from urllib.request import urlopen
from bs4 import BeautifulSoup


def time_handler():
    html=urlopen("http://rss.pdflibr.com/jianshu/home.json")
    bsObj=BeautifulSoup(html.read())
    print(bsObj)
    global timer
    timer = threading.Timer(5, time_handler)
    timer.start()


if __name__ == '__main__':
    time_handler()

程序看起来很简单,通过在回调函数里面,重新创建定时器,来使得定时器能够一直工作。

但是值得注意的是,定时器的句柄需要定义成为一个全局变量,这样做的好处是,创建的定时器进程和实例不会堆积,而是覆盖,避免不必要的内存占用。

另外利用threading创建的定时器还有一个好处是,每一个定时器的创建都是在一个新的进程里面,所以定时器是不阻塞式的。

最后看看结果:



参考资料:python 定时器


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - python 如何定时执行一个任务

分享到:

发表评论

评论列表