Pea*_*ley 9 python django rabbitmq celery django-celery
我正在运行Django,Celery和RabbitMQ.我想要实现的是确保与一个用户相关的任务按顺序执行(具体来说,当时一个,我不希望每个用户的任务并发)
我做了一些研究,并且:
applied_async"task_tree或队列相关联?有什么办法可以使用这个包实现额外的无重复功能吗?编辑:在芹菜食谱中也有这个"锁定"的例子,因为这个概念很好,我看不到一种可能的方法让它在我的情况下按预期工作 - 只是如果我无法为用户获取锁定,任务必须重试,但这意味着将它推到队列的末尾.
这里最好的做法是什么?
如果您配置 celery 工作线程,使其一次只能执行一项任务(请参阅worker_concurrency设置),那么您可以在每个用户的基础上强制执行所需的并发性。使用类似的方法
NUMBER_OF_CELERY_WORKERS = 10
def get_task_queue_for_user(user):
return "user_queue_{}".format(user.id % NUMBER_OF_CELERY_WORKERS)
Run Code Online (Sandbox Code Playgroud)
根据用户id获取任务队列,每个用户的每个任务都会被分配到同一个队列中。工作人员需要配置为仅使用单个任务队列中的任务。
它会像这样发挥:
用户49触发任务
任务发送至user_queue_9
当唯一一个正在侦听的 celery Workeruser_queue_9准备好使用新任务时,该任务就会被执行
但这是一个很奇怪的答案,因为
每个队列只需要一个 celery 工作人员是一个脆弱的系统 - 如果 celery 工作人员停止,整个队列也会停止
工人运转效率低下
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |