创建一次只执行一次的Celery任务

时间:2011-10-14 10:28:59

标签: python locking celery

我已经阅读了Celery文档(Cookbook :: Creating Tasks)中的相应文章,但我并不完全喜欢建议的解决方案。我有很长的运行任务(从15分钟到1小时甚至更长),因此选择一些LOCK_EXPIRE设置似乎不可靠:如果结果太小,我会同时运行两个任务,如果它太大了由于某种原因芹菜进程死亡,我需要手动删除锁定缓存键。

我想到的想法是我可以使用两个不同的锁:一个用fcntl.lockf(用于不同的芹菜工作进程)创建,另一个用threading.Lock()创建(当任务在同一个中执行时)芹菜过程)。但是有两个锁似乎有些过分。

所以,我的问题是:对我的问题最简单的解决方案是什么?它不必是跨平台的,只能支持Linux。

1 个答案:

答案 0 :(得分:2)

只使用一个没有过期的锁,并创建一个periodic“调查员”任务,检查一切是否正常,也就是说,如果另一个任务意外死亡,它会修复锁定问题。好的,看看here