1

我有一个无限期运行的实时数据采集器,通过 HTTP 采集数据并每隔几秒将其放入 MySQL 数据库。

在我的程序中,我有一个 while True 循环,只要上次生成时间大于 X 秒,就会生成工作人员(下载数据并保存数据的函数):

while True:
    if _last_updated - datetime.now() > timedelta(seconds=5):
        green_pool.spawn_n(worker) # yes I'm using Eventlet!
        _last_updated = datetime.now()

确保该模块始终正常工作、永不冻结且永不停机的最佳方法是什么?我应该检查绿色游泳池的大小吗?我正在考虑用 Python 为它写一个看门狗,你会推荐这样做吗?如果是这样,我应该记住什么?

最好的

4

1 回答 1

1

这可能有点矫枉过正,但我​​会考虑使用supervisord。这是一个控制其他进程的进程(有点像init.d)。它将允许您启动/停止/重新启动包含while True:循环的控制脚本。如果它停止工作,它还将自动重新启动控制脚本。

正如您所提到的,您应该在控制脚本中密切关注池大小和工人产卵的成功/失败。但是为了确保控制脚本始终运行,supervisord 符合要求。

于 2012-06-06T22:01:09.880 回答