我正在尝试用芹菜构建一个分布式作业执行系统。
当我在一台计算机(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 worker1
和celery -A sub_tasks worker --loglevel=info -n worker2
启动了工作。
答案 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])
。然后减法工作者将不接受添加任务。