python-3.x - 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].result
说Task of kind 'grouptest.add' never registered, please make sure it's imported.
我什至正在检查是否在 python REPLjobresult.ready()
中设置。True
有时它会在同一个 REPL 会话中抛出错误,有时则不会。(经过一些观察,我猜想,它从错误传递False
到错误True
。)
我是 celery 的新手并遵循一些模板,但是如何确保我的任务已正确注册(无论这意味着什么)并且所有这些都始终如一地执行。如果我的代码错了,至少错误是一致的,是吗?
解决方案
目前,Celery 不支持 Python 3.7。您也许可以使用解决方法: https ://github.com/celery/celery/issues/4500
推荐阅读
- php - 一个工作的 php 表单
- laravel - 页面重新加载 laravel 后销毁会话
- android - 我不小心从 android studio 的智能感知窗口中删除了 android.widget.button 如何取回它?
- react-redux - React-Redux _self 用法
- beautifulsoup - BeautifulSoup 代码错误
- python - 调用父类时返回子类
- php - 如何从数组中获取匹配并获得剩余的所有值
- php - JS 没有在 laravel 内容刀片标签内运行
- mysql - 使用跨表列划分对记录进行排名
- r - 使用 r 中的列增量创建 for 循环