Python 在给定的时间间隔内完成作业

Python 在给定的时间间隔内完成作业,python,cron,raspberry-pi,Python,Cron,Raspberry Pi,我有一个python脚本,可以在树莓上加载网页 此脚本必须在启动时运行,然后每15分钟运行一次。将来会有很多,可能1000甚至更多。目前,我正在使用cronjob执行此操作,但问题是,所有1000颗树莓都将在同一时间连接到网页(加上减去几秒钟,因为它们从web获取精确的时钟)。最好在上次运行15分钟后执行此命令,而不管时间如何。我喜欢cronjob解决方案,因为我没有在后台运行任何东西,所以它只是执行它的任务,然后就结束了 另一方面,cronjob只关心分钟,而不关心秒数,因此,即使我在这15分

我有一个python脚本,可以在树莓上加载网页

此脚本必须在启动时运行,然后每15分钟运行一次。将来会有很多,可能1000甚至更多。目前,我正在使用cronjob执行此操作,但问题是,所有1000颗树莓都将在同一时间连接到网页(加上减去几秒钟,因为它们从web获取精确的时钟)。最好在上次运行15分钟后执行此命令,而不管时间如何。我喜欢cronjob解决方案,因为我没有在后台运行任何东西,所以它只是执行它的任务,然后就结束了

另一方面,cronjob只关心分钟,而不关心秒数,因此,即使我在这15分钟内分散1000个pi,我仍然会在每分钟有大约80个对网页的同时请求


有很好的解决方案吗?

您可以使用
time
模块在python中完全实现这一点:

import time

def main():
    while True:
        # Save time before starting
        start = time.time()
        # Run you job
        do_task()
        # Estimate how much time the task took (end-start)
        delay = time.time()-start
        # Wait for next 15 mins (counted from start, not from end)
        time.sleep((15*60)-delay)

if __name__ == "__main__":
    main()

等待
sleep()
的脚本不应该占用太多CPU(如果有的话)。这可能是因为循环仍然在长时间内缓慢地进行时移,但对于web抓取来说可能是可以接受的。

在执行命令之前,始终可以将unix命令sleep xx添加到cronjob中

示例:**/15****(sleep 20;/root/crontabjob.sh)


现在作业将每15分20秒运行一次(00:15:20,00:30:20),00:45:20…

谢谢!它不必是15分钟,可以是10到20分钟之间的任何时间,所以没关系。。谢谢你的回答!为什么需要def main()。它允许轻松重用代码。为了更好地理解,我将在示例中添加一些代码。