芹菜属性错误:异步错误



我在我的Mac(OS/X 10.13.4(上本地运行RabbitMQ和Celery,当我运行add.delay(x,y(时,以下代码在本地工作:

#!/usr/bin/env python
from celery import Celery
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
app = Celery('tasks', 
broker='pyamqp://appuser:xx@c2/appvhost', 
backend='db+mysql://appuser:xx@c2/pigpen')
@app.task(bind=True)
def dump_context(self, x, y):
print('Executing task id {0.id}, args: {0.args!r} kwargs {0.kwargs!r}'.format(self.request))
@app.task
def add(x, y):
logger.info('Adding {0} + {1}'.format(x, y))
return x + y

但是,当我尝试在运行 Kali 2 的 ODROID-C2018.2(当前更新(上运行 Celery worker 时,我在运行celery -A tasks worker --loglevel=info时出现以下错误:

Traceback (most recent call last):
File "/usr/local/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 14, in main
_main()
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 326, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 488, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 281, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 480, in handle_argv
return self.execute(command, argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 412, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 221, in run_from_argv
return self(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 244, in __call__
ret = self.run(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 255, in run
**kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/worker/worker.py", line 99, in __init__
self.setup_instance(**self.prepare_args(**kwargs))
File "/usr/local/lib/python2.7/dist-packages/celery/worker/worker.py", line 122, in setup_instance
self.should_use_eventloop() if use_eventloop is None
File "/usr/local/lib/python2.7/dist-packages/celery/worker/worker.py", line 241, in should_use_eventloop
self._conninfo.transport.implements.async and
File "/home/autossh/.local/lib/python2.7/site-packages/kombu/transport/base.py", line 125, in __getattr__
raise AttributeError(key)
AttributeError: async

从Kali ODROID,我能够使用Python Pika脚本连接到名为c2的主机上的RabbitMQ实例,并且该设备的mysql也适用于c2机器。我发现了类似的错误,这些解决方案都不适合我。

通过 pip 安装在 ODROID-C2 上的芹菜版本是:

celery --version
4.1.0 (latentcall)

我们只更新到芹菜==4.1.1 进行排序

似乎 4.1.X 的最新版本整理了 kombu 上的模块名称更改

确保您使用的是 Kombu 4.1.0。最新版本的 Kombu 将异步重命名为异步。

Celery 不会将其对海带和台球的要求固定在特定版本上。它们需要以下内容:

billiard>=3.5.0.2,<3.6.0
kombu>=4.0.2,<5.0

https://github.com/celery/celery/blob/v4.1.0/requirements/default.txt

Kombu 4.2.0 发布时进行了重大更改,以前版本的 celery 会自动安装它。

由于 Celery 不固定特定版本,因此如果继续使用 celery 4.1.0,则应固定到以下内容:

kombu==4.1.0
billiard==3.5.0.2

pip install --upgrade 'celery>=4.2.0rc4'

kombu==4.2.0async更名为asynchronous,芹菜在celery==4.2.0rc4年修复了它。

所以你应该将芹菜升级到 4.2.0rc4。

参考: https://github.com/celery/celery/commit/c8ef7ad60b72a194654c58beb04a1d65cd0435ad

这就是问题所在,实际上是海带版本。

我设法安装了 2 个版本的 kombu,4.2.0 作为'appuser'用户,我试图在其下启动工作线程,4.1.0 作为'root'.'root'的 4.1.0 可以工作,其他用户不起作用。

我从'appuser'用户帐户中删除了 kombu 4.2.0(pip 卸载 kombu作为该用户(,因此它将使用系统范围内安装的软件包,并且 Celery worker 在该帐户下正常运行。

为了验证它实际上是 kombu 4.2.0 中断了,我删除了系统范围的 4.1.0 版本,并让 pip 安装最新版本,它作为 4.2.0,芹菜工人将不再启动。我卸载了它并强制 pip 安装 4.1.0(pip install kombu==4.1.0(,并且工人操作正常。

作为另一项检查,我去了我的Mac,我最初编写/测试了这段代码,并检查了pip:4.1.0安装在那里的kombu版本。我不确定为什么 Mac 和 Pi3 上的 pip 安装了 4.1.0 版本的 kombu,而 ODROID-C2 上的 pip 安装了 4.2.0 版本。如果有机会,我会挖掘更多,但它现在有效。

一个快速的黑客修复是禁用结果后端:

# CELERY_RESULT_BACKEND = 'redis://redis'

最新更新