我有一个无限期运行的实时数据采集器,通过HTTP抓取数据并每隔几秒就将其放入MySQL数据库。
在我的程序中,每当最后生成的时间大于X秒时,我都会有一个True循环产生工作者(下载数据并保存它的函数):
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编写看门狗,你会建议这样做吗?如果是这样,我应该记住哪些事情?
最佳
答案 0 :(得分:1)
这可能有点矫枉过正,但我会考虑使用supervisord。这是一个控制其他进程的过程(有点像init.d)。它将允许您启动/停止/重新启动包含while True:
循环的控制脚本。如果控制脚本停止工作,它也会自动重启控制脚本。
正如您所提到的,您应该在控制脚本中密切关注池大小以及工作人员生成的成功/失败。但是为了确保控制脚本始终在运行,supervisord符合要求。