1

我们有大约 10 个不同的 Python 脚本,它们从 Web 下载数据、从数据库读取数据并将数据写回该数据库。他们每 10 秒重复一次(或最后一个任务完成后 10 秒)。

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

  1. a while True 运行任务然后休眠一段时间。它可以由像 supervisord 这样的看门狗保护,确保它始终处于运行状态。

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

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

我想避免实际上做某事的长时间运行的进程,因为我不想长时间处理内存问题等。

附加信息

  1. 这些脚本是不同的,因为它们每个都从不同的源检索数据,并查询、计算和插入不同的数据到数据库中。

  2. 这些任务每 10 秒执行一次,因为正在检索的数据是实时的,我们不仅需要保持非常频繁的更新,还要将所有历史数据保存在数据库中。

  3. 脚本使用了很多资源 - MySQL 连接、HTTP 连接、Redis 连接等。我们之前遇到过使用长时间运行方法的问题,特别是 MySQL 连接(MySQL 服务器之类的东西已经消失,甚至尽管所有连接都已关闭)。因此,倾向于让脚本在更短的时间内运行。

在这方面有哪些常见的方法?

4

2 回答 2

0

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

OTOH,每 10 秒检查一次听起来很忙。您不能进行设置,以便您监控的任何内容都会在发生变化时告诉您吗?或者将记录批量化,这样您就可以一次检索一天的价值?

于 2013-03-26T18:51:55.767 回答
0

如果您在 linux 上运行,则 cron 的粒度为一分钟。我们有不断运行的流程。脚本不会监视它们,而是会打开一个信号量,该信号量会在程序正常完成与否时释放。这样,如果它运行很长时间并且被 cron 再次调用,则副本将在无法获得锁时退出。这样,您可以根据需要经常调用它,而不会踩到可能仍在运行的副本。

于 2013-04-04T22:56:03.320 回答