需要确保一个任务只能执行一次,找到了一下两篇资料
1.http://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#ensuring-a-task-is-only-executed-one-at-a-time
2.http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html
问题 1:
貌似都是通过 acquire lock 来实现的,但是实际上我没用加锁的方式,也没遇到过同一个任务被运行两次的情况,加锁只是为了 ensure 吗,不加也没多关系?
问题 2:
celery 如果是分布式的,那 celery 是怎么做到一个任务只落到一个 celery 实例上的?使用 mq 的 lock 来保证的吗?redis 和 rmq 都能保证这一点吗
1
bramblex 2016-09-17 13:24:23 +08:00 via Android
你没发现你现在是集中式的设计方案,却企图用分布式的方式实现吗?
|
2
julyclyde 2016-09-17 22:44:23 +08:00 via iPad
redis broker 应该是 lpush rpop 这样的,并不需要加索啊
|