单个机器上的多个工作人员用于不同的任务

时间:2013-03-05 07:58:58

标签: python celery distributed

我正在尝试用芹菜构建一个分布式作业执行系统。

当我在一台计算机(localhost)上启动2个工作程序时,其中一个用于添加任务add而另一个用于减法任务sub,然后使用add.delay()启动关于几个加法任务,减法工作者的终端有一个错误:

[2013-03-05 15:51:18,898: ERROR/MainProcess] Received unregistered task of type 'add_tasks.add'.

在这个测试中,我启动了2个额外任务:一个被加法工作者捕获,而另一个被减法工作者捕获,导致上面的错误。如何更改配置,以便减法工作人员不会捕获第二个添加任务?感谢。

以下是代码:

add_tasks.py:

celery = Celery('add_tasks', backend='amqp', broker='amqp://guest@localhost//')

@celery.task
def add(x, y):
    sleep(20)
    return x + y

sub_tasks.py:

celery = Celery('sub_tasks', backend='amqp', broker='amqp://guest@localhost//')

@celery.task
def sub(x, y):
    sleep(10)
    return x - y

我在本地主机的两个终端中通过celery -A add_tasks worker --loglevel=info -n worker1celery -A sub_tasks worker --loglevel=info -n worker2启动了工作。

1 个答案:

答案 0 :(得分:4)

最后我发现ROUTER功能可以解决我的问题。我把我的解决方案放在这里,并希望它对那些遇到同样问题的人有用。

启动工作人员时,我们可以使用-Q queue选项限制工作人员只接受queue中的任务。在我的情况下,我使用了celery -A add_tasks worker --loglevel=info -n worker1 -Q addition

另一方面,在开始新任务时,我们应该明确指出队列参数,例如add.apply_async(queue='addition',priority=0,args=[1,4])sub.apply_async(queue='subtraction',priority=0,args=[1,4])。然后减法工作者将不接受添加任务。