一尘不染

用Celery创建动态队列

flask

这是我的情况:

当用户登录到我的网站时,我为给定的用户排队执行一系列任务(通常每个任务花费100毫秒的时间,每个用户有100毫秒的任务)。这些任务排队到默认的Celery队列中,而我有100的工人正在运行。我使用websockets在后端完成任务时向用户显示实时进度。如果我只有1个或2个用户处于活动状态,那么生活会很好。

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

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


阅读 763

收藏
2020-04-07

共1个答案

一尘不染

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'])
2020-04-07