我们有大约10种不同的Python脚本,可以从Web下载数据,从数据库中读取数据并将数据写回该数据库。他们每隔10秒(或最后一个任务完成后10秒)重复这样做。
问题是,运行这些任务的最佳方法是什么?我可以想到几个方面:
一段时间运行任务的True然后休息一段时间。它可以由像监督人员这样的看门狗保护,确保它始终处于运行状态。
让脚本只执行一次任务,并由另一个进程每10秒从外部调用一次脚本。
让脚本执行任务可以说1小时(每10秒一小时),并且有一个看门狗确保一旦小时结束后该任务再次运行。
我想避免长时间运行的进程,因为我不想长时间处理内存问题等。
其他信息
脚本不同,因为它们各自从不同的源检索数据,并查询,计算并将不同的数据插入数据库。
由于要检索的数据是实时的,因此每10秒执行一次任务,我们不仅要经常更新它,还要将所有历史数据保存在数据库中。
脚本使用了大量资源--MySQL连接,HTTP连接,Redis连接等。我们之前遇到过使用长时间运行方法的问题,特别是MySQL连接(MySQL之类的东西)服务器已经消失,即使所有连接都已关闭)。因此倾向于让脚本在更短的时间内运行。
这方面有哪些常见方法?
答案 0 :(得分:0)
除非你的脚本以某种方式泄漏内存(非常不可能),否则它们应该都是相同的。所以,为了简单起见(你的时间编程/调试比机器时间的几毫秒,甚至每10秒钟要贵得多!)我会选择每10秒检查一次的脚本
OTOH,每10秒检查听起来像是忙碌的工作。你不能设置,以便你有什么监控告诉你什么时候有变化?或者批量记录,以便您可以检索一天的价值?答案 1 :(得分:0)
如果你在linux上运行,cron的粒度只有一分钟。我们有不断运行的流程。该脚本将打开一个信号量,而不是观察它们,当程序正常完成时,该信号量将被释放。这样,如果它运行很长并且它被cron再次调用,则副本将在无法获得锁定时退出。通过这种方式,您可以根据需要经常调用它,而无需踩踏可能仍在运行的副本。