2013-03-26 88 views
1

我们有大约10种不同的Python脚本,它们可以从网上下载数据,从数据库读取数据并将数据写回到该数据库。他们每10秒钟重复一次(或最后一次任务完成后的10秒钟)。重复的任务 - 产生新的进程或连续运行?

问题是,运行这些任务的最佳方法是什么?我可以想到几种方法:

  1. a while True运行任务,然后睡眠的时间间隔。它可以像supervisord这样的监管机构来保护,确保它始终保持正常运转。

  2. 使脚本只执行一次任务,并且每隔10秒由另一个进程从外部调用该脚本。

  3. 让脚本执行任务让我们说1小时(每10秒钟一小时),然后让看门狗确保任务在小时结束后再次运行。

我想,以避免长时间运行的进程,实际上做一些事情,因为我不想处理过的很长一段时间内存问题等。

附加资料

  1. 的脚本是不同的,因为它们每一个检索来自不同的源的数据,并且查询,计算和不同的数据插入到数据库中。

  2. 由于被检索的数据是实时的,因此每10秒执行一次任务,我们不仅需要非常频繁地更新它,而且还要将所有历史数据保存在数据库中。

  3. 脚本中使用了很多资源--MySQL连接,HTTP连接,Redis连接等。我们遇到过使用长时间运行的方法的问题,特别是与MySQL连接有关的问题(比如MySQL服务器已经消失,即使所有连接都已关闭)。因此倾向于让脚本在较短的时间内运行。

这是什么常见的方法?

回答

0

除非你的脚本以某种方式泄漏内存(不太可能),它们应该都是相同的。所以,纯粹简单(你的时间编程/调试比机器几个毫秒的时间要贵得多,甚至每10秒钟一次!)我会选择每10秒检查一次的脚本。

OTOH,每10秒检查一次听起来像是忙碌。难道你不能设置,以便无论你正在监测什么时候有变化,告诉你什么?或者将记录批量上传,以便在某个时间检索一天的价值?

+0

请参阅我的编辑,谢谢! – user1094786 2013-03-26 23:08:36

0

如果您在linux上运行,cron具有一分钟的粒度。我们有不断运行的流程。而不是看它们,脚本会打开一个信号量,当程序正常结束或没有结束时会被释放。这种方式如果它运行时间很长,并且被cron再次调用,那么拷贝将在无法获得锁定时退出。这样,您可以根据需要经常调用它,而不必踩在可能仍在运行的副本上。