我有一个python脚本,可以在树莓上加载一个网页。
此脚本必须在启动时运行,然后每15分钟运行一次。将来会有很多这样的,可能是1000甚至更多。目前我正在使用cronjob进行此操作,但问题是所有1000个覆盆子会在同一时间连接到网页(加上减去几秒钟,因为他们从网络上获取精确的时钟)这将是好的无论何时,在上次运行15分钟后执行命令。我喜欢cronjob解决方案,因为我没有在后台运行,所以它只是执行它的工作,然后结束了。
另一方面,cronjob只关注分钟,而不是秒,所以即使我在这15分钟内分散了1000个pi,我仍然会每分钟同时向网页发出大约80个同时请求。 / p>有一个很好的解决方案吗?
答案 0 :(得分:1)
您可以使用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(如果有的话)。可能是循环仍然在很长一段时间内缓慢移动,但可能对于网络提取是可接受的。
答案 1 :(得分:0)
在执行命令之前,您始终可以将unix命令sleep xx添加到cronjob中。
示例:* / 15 * * * *(睡眠20; /root/crontabjob.sh)
现在这项工作将每15分20秒(00:15:20,00:30:20),00:45:20运行....)