python - 使用 Celery 创建动态队列

标签 python queue flask celery

这是我的场景:

当用户登录到我的网站时,我会为给定用户排队一堆任务(通常每个任务需要 100 毫秒,每个用户有 100 多个任务)。这些任务排队到默认的 Celery 队列,我有 100 多个工作人员在运行。当任务在后端完成时,我使用 websockets 向用户显示实时进度。如果我只有 1 或 2 个活跃用户,生活会很美好。

现在,如果我有几个并发用户登录到我的站点,则后面的用户会排在初始用户之后,他们的任务就会饿死(因为所有任务都进入同一个队列)。我的想法是为每个用户创建一个动态队列以确保公平。然而,根据 Celery 文档(http://docs.celeryproject.org/en/latest/userguide/routing.html#defining-queues),我似乎需要静态定义队列。

关于在我的场景中使用 celery 的最佳实践有什么建议吗?

最佳答案

http://docs.celeryproject.org/en/latest/userguide/workers.html#queues

celery -A proj control add_consumer foo -d worker1.local

可以使用 app.control.add_consumer() 方法动态完成同样的操作:

app.control.add_consumer('foo', reply=True)
[{u'worker1.local': {u'ok': u"already consuming from u'foo'"}}]

app.control.add_consumer('foo', reply=True,
destination=['worker1@example.com'])

关于python - 使用 Celery 创建动态队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730710/

相关文章:

python - 使用专门的面向 JSON 的 Flask 应用程序示例时出现属性错误

python - 将列表中的数据提取到 CSV 文件中的多行 (Python3)

循环队列 DLL 无法按预期工作以进行推送和显示

c# - 通用 c# 循环(分区/排序)队列

javascript - 循环内的 Ajax 调用需要顺序响应

python - 使用 Flask-Restful 时使用 fields.Url 生成 url 会生成 BuildError

python - Pickler 中 __reduce__ 的具体用法是什么

python - Matplotlib 中极地等高线图的插值差异

python - 如何让函数在 python 中返回一个图形(使用 matplotlib)?

python - Flask-MySQL : how to handle payload to Insert to DB?