0

我已经编写了一个抓取器,它执行 html 抓取,然后使用 API 来获取一些数据,因为它的代码非常冗长,我没有把它放在这里。我已经实现了随机睡眠方法并在我的代码中使用它来监控油门。但我想确保我不会过度运行这段代码,所以我的想法是运行 3-4 小时,然后休息一下,然后再次运行。我没有在 python 中做过这样的事情,我试图搜索,但不确定从哪里开始,如果我能得到一些指导,那就太好了。如果 python 有一个特定的模块链接,那将是一个很大的帮助。

这也相关吗?我不需要这种复杂程度?

对 Python 中类似 Cron 的调度程序的建议?

我有每个抓取任务的函数,并且我有调用所有这些函数的 main 方法。

4

2 回答 2

1

你可以只记下你开始的时间,每次你想运行一些东西时,确保你没有超过给定的最大值。这样的事情应该让你开始:

from datetime import datetime
MAX_SECONDS = 3600

# note the time you have started
start = datetime.now()

while True:
    current = datetime.now()
    diff = current-start
    if diff.seconds >= MAX_SECONDS:
        # break the loop after MAX_SECONDS
        break

    # MAX_SECONDS not exceeded, run more tasks
    scrape_some_more() 

这是datetime 模块文档的链接

于 2012-10-20T15:17:49.947 回答
1

您可以使用threading.Timer对象在超过时间后向主线程调度中断信号:

import thread, threading

def longjob():
    try:
        # do your job
        while True:
            print '*', 
    except KeyboardInterrupt:
        # do your cleanup
        print 'ok, giving up'

def terminate():
    print 'sorry, pal'
    thread.interrupt_main()

time_limit = 5  # terminate in 5 seconds
threading.Timer(time_limit, terminate).start()
longjob()

把它放在你的 crontab 中,每time_limit+ 2 分钟运行一次。

于 2012-10-20T16:03:26.840 回答