在Python 3.7,Ubuntu 16.04中,Celery Task未注册异常

问题描述 投票:0回答:1

这就是芹菜配置的样子

from celery import Celery, group


celery = Celery('grouptest', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')


celery.conf.CELERY_TASK_SERIALIZER = 'pickle'      
celery.conf.CELERY_RESULT_SERIALIZER ='pickle'     
celery.conf.CELERY_ACCEPT_CONTENT = {'json', 'pickle'}


@celery.task
def add(self, x,y):
    print('Executing with arguments', x, y)
    return x+y

我用命令启动celery worker守护进程(在同一个工作目录中)

$celery worker -A grouptest -l info -c 5

在终端。

接下来,从另一个进程,我正在调用这样的服务。

bigList=[(randint(60, 90), randint(60, 90)) for _ in range(10)]
jobresult=group([add.s(celery, i[0], i[1]) for i in bigList]).apply_async()
#Basically adding a ten pairs of random numbers

有趣的是,即使经过漫长的等待,也只执行了一些任务。例如,jobresult[0].result给出两个数字的总和就好了,但jobresult[1].resultTask of kind 'grouptest.add' never registered, please make sure it's imported.

我甚至检查jobresult.ready()是否在python REPL中设置了True。有时它会在同一个REPL会话中抛出错误,有时却不会抛出错误。 (经过一些观察,我猜测,它从False传递到错误到True。)

我是celery的新手并且遵循一些模板,但是如何确保我正确地注册任务(无论这意味着什么)并且所有这些都是一致执行的。如果我的代码错了,至少错误会是一致的,是吗?

python-3.x redis celery task-queue celery-task
1个回答
1
投票

在撰写评论时,Celery不支持Python 3.7。您可以使用解决方法:https://github.com/celery/celery/issues/4500

© www.soinside.com 2019 - 2024. All rights reserved.