首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Celery AttributeError:异步错误

Celery AttributeError:异步错误
EN

Stack Overflow用户
提问于 2018-05-21 16:42:49
回答 6查看 17K关注 0票数 61

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

代码语言:javascript
复制
#!/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 2018.2的ODROID-C2上运行Celery worker时(w.当前更新,我在运行celery -A tasks worker --loglevel=info时得到以下错误

代码语言:javascript
复制
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版本是:

代码语言:javascript
复制
celery --version
4.1.0 (latentcall)
EN

回答 6

Stack Overflow用户

发布于 2018-05-22 17:55:25

我们只是通过更新到celery==4.1.1进行排序

4.1.X的最新版本似乎解决了kombu上的模块名称更改问题

票数 100
EN

Stack Overflow用户

发布于 2018-05-21 17:02:15

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

票数 27
EN

Stack Overflow用户

发布于 2018-05-22 06:38:38

芹菜没有将其对kombu和台球的要求限制在特定的版本上。它们需要满足以下条件:

代码语言:javascript
复制
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,则应锁定以下内容:

代码语言:javascript
复制
kombu==4.1.0
billiard==3.5.0.2
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50444988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档