用Celery创建动态队列
这是我的情况:
当用户登录到我的网站时,我为给定的用户排队执行一系列任务(通常每个任务花费100毫秒的时间,每个用户有100毫秒的任务)。这些任务排队到默认的Celery队列中,而我有100的工人正在运行。我使用websockets在后端完成任务时向用户显示实时进度。如果我只有1个或2个用户处于活动状态,那么生活会很好。
现在,如果我有几个并发用户登录到我的站点,则后一个用户将排在初始用户之后,并且他们的任务将挨饿(因为所有任务都进入同一队列)。我的想法是为每个用户创建一个动态队列以确保公平。但是,根据Celery文档(http://docs.celeryproject.org/en/latest/userguide/routing.html#defining-queues),似乎我需要静态定义队列。
关于在我的场景中使用celery的最佳做法有什么建议吗?
回答:
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'])
以上是 用Celery创建动态队列 的全部内容, 来源链接: utcz.com/qa/427964.html