【问题标题】:Assign different tasks to different celery workers将不同的任务分配给不同的芹菜工人
【发布时间】:2013-11-09 08:02:11
【问题描述】:

我正在使用这个命令运行我的服务器:

celery worker -Q q1,q2 -c 2

这表明我的服务器将处理队列q1q2 上的所有任务,并且我有2 个工作人员正在运行。我的服务器应该支持 2 个不同的任务:

@celery.task(name='test1')
def test1():
    print "test1"
    time.sleep(3)

@celery.task(name='test2')
def test2():
    print "test2"

如果我将我的test1 任务发送到队列q1test2q2,两个工作人员都将运行这两个任务。所以结果将是:

test1
test2
test1
test2
...

现在我需要的是我的一名工人处理test1,另一名处理test2。一种解决方案是像这样运行两个 celery worker:

celery worker -Q q1 -c 1
celery worker -Q q2 -c 1

每个人处理 1 个队列。但我想让它们更清洁并使用-c 2。我找到了Celery Routing,但不确定这是否是我想要的。

【问题讨论】:

    标签: python celery


    【解决方案1】:

    我找到了答案,我把它放在这里以防其他人也想这样做:

    可以使用celery multi 代替celery worker -Q q1,q2 -c 2

    celery multi start 2 -Q:1 q1 -Q:2 q2 -c:1 1 -c:2 1
    

    这表示我们有 2 个队列:-Q:1 q1 表示队列 #1,名称为 q1q2 相同,每个队列都有不同的并发,-c:1 1 表示第一个 celery worker 具有并发1 个。

    【讨论】:

    • 所以你在这里使用了两个经纪人?我想知道是否可以只使用共享代理和共享工作服务器?工人只是根据任务名称调用 test1() 或 test2() 。谢谢。
    • 这实际上就是你想要的。共享代理和服务器。他们只是不同的工作人员,使用不同的队列处理不同的任务。
    • 你能指出我可以学习如何将任务分派到相应队列的文档吗?因为从上面的代码中,我看不出test1,test2和q1,q2有什么绑定关系。非常感谢。
    • @JFreebird 你可以在这里找到一堆例子:celery.readthedocs.org/en/latest/reference/…
    • 同样的配置,每个作品只需要写一次:celery multi start 2 -c 1 -Q:1 q1 -Q:2 q2
    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 2018-07-12
    • 2016-10-22
    • 1970-01-01
    • 2016-03-31
    • 2016-04-20
    • 2015-05-28
    • 2020-10-07
    相关资源
    最近更新 更多