我已经阅读了Celery文档(Cookbook :: Creating Tasks)中的相应文章,但我并不完全喜欢建议的解决方案。我有很长的运行任务(从15分钟到1小时甚至更长),因此选择一些LOCK_EXPIRE设置似乎不可靠:如果结果太小,我会同时运行两个任务,如果它太大了由于某种原因芹菜进程死亡,我需要手动删除锁定缓存键。
我想到的想法是我可以使用两个不同的锁:一个用fcntl.lockf(用于不同的芹菜工作进程)创建,另一个用threading.Lock()创建(当任务在同一个中执行时)芹菜过程)。但是有两个锁似乎有些过分。
所以,我的问题是:对我的问题最简单的解决方案是什么?它不必是跨平台的,只能支持Linux。