首页 > 解决方案 > Python 3.7、Ubuntu 16.04 中的 Celery 任务未注册异常

问题描述

这就是芹菜配置的样子

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.

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

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

标签: python-3.xrediscelerytask-queuecelery-task

解决方案


目前,Celery 不支持 Python 3.7。您也许可以使用解决方法: https ://github.com/celery/celery/issues/4500


推荐阅读