在celerybeat中只运行一个任务
我有一个任务是每分钟执行一次,使用的是celerybeat。这个运行得挺好的。不过,有时候这个任务执行的时间会超过一分钟,这样就会导致同一个任务同时运行两次。这就会引发一些竞争条件,搞得事情有点乱。
我可以(而且可能应该)修复我的任务,让它正常工作,但我想知道celery有没有什么内置的方法来确保这一点。我简单在网上查了一下,没找到相关的资料。
4 个回答
0
你可以试着给那个包含你要运行的函数的对象添加一个类字段,用这个字段来控制“其他人是否在工作”。
1
如果你在使用定时任务,比如说cron调度或者时间间隔来运行周期性任务,你还是会遇到一些问题。你可以考虑使用锁机制,这种机制可以通过数据库、缓存,甚至是文件系统来实现,或者你也可以从上一个任务中安排下一个任务,虽然这可能不是最好的方法。这个问题可能对你有帮助:django celery:如何以编程方式设置任务在特定时间间隔运行
2
你可以添加一个锁,可以用像memcached这样的工具,或者直接用你的数据库。