我已经在芹菜文档中阅读了相应的文章(Cookbook:: Creating Tasks),但是我并不完全喜欢建议的解决方案。我有很长时间运行的任务(从15分钟到1小时甚至可能更长),因此选择一些LOCK_EXPIRE设置似乎不可靠:如果它太小,我得到两个任务同时运行,如果它太大,一个芹菜进程由于某种原因死亡,我需要手动删除锁定缓存键。
我想到的想法是我可以使用两个不同的锁:一个是用fcntl创建的。另一个是threading.Lock()(当任务在同一个芹菜进程中执行时)。然而,有两个锁似乎有些过度。
所以,我的问题是:我的问题最简单的解决方案是什么?它不必是跨平台的,可以只支持Linux。只使用一个没有过期的锁,并创建一个定期检查是否一切正常的"调查员"任务,也就是说,如果另一个任务意外死亡,它会修复锁问题。作为加分项,请看这里