我基本上在芹菜中使用rabbitmq队列作为穷人的同步.例如,当某些对象被更新(并且成本很高)时,我会根据它们的对象ID将它们循环到一组10个队列.首先这是一种常见的模式,还是有更好的方法.
其次,使用celeryd,似乎并发级别选项(CELERY_CONCURRENCY)设置所有队列中的worker数.这种方式违背了使用队列进行同步的目的,因为队列可以由多个工作人员提供服务,这意味着在对同一对象执行不同操作时可能存在竞争条件.
有没有办法设置并发级别(或工作池选项),以便我们每N个队列有一个工作者?
谢谢
斯里兰卡
最佳答案 为什么不使用memcache或nosql db简单地实现全局任务锁定系统?
这样就可以避免任何竞争条件.
这是一个例子
http://ask.github.com/celery/cookbook/tasks.html#ensuring-a-task-is-only-executed-one-at-a-time