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