python - 在 Python 中设置 celery 任务后端的麻烦
问题描述
我按照 [ http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html ] 中给出的所有步骤进行操作 这是代码:
from __future__ import absolute_import
from celery import Celery
#app = Celery('tasks', broker='pyamqp://guest@localhost//')
app = Celery('tasks', backend='redis://localhost', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
当我使用以下命令运行 celery worker
celery -A tasks worker --loglevel=info
我收到设置后端的语法错误。这是错误消息:
[2018-07-10 16:37:21,970: CRITICAL/MainProcess] 不可恢复的错误:SyntaxError('invalid syntax', ('c:\users\user_\appdata\local\programs\python\python37-32\lib\site -packages\celery\backends\redis.py', 22, 19, 'from . import async, base\n')) Traceback(最近一次调用最后):文件“c:\users\user_\appdata\local\programs \python\python37-32\lib\site-packages\kombu\utils\objects.py”,第 42 行,在获取 返回 obj 中。dict [自我。姓名] KeyError: 'backend' 在处理上述异常的过程中,又发生了一个异常: Traceback (最近一次调用 last): File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site- packages\celery\worker\worker.py”,第 205 行,在 start self.blueprint.start(self) 文件“c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages \celery\bootsteps.py”,第 115 行,在 start self.on_start() 文件中“c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\apps\worker .py”,第 139 行,在 on_start self.emit_banner() 文件“c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\apps\worker.py”中,第 154 行,在 emit_banner '\n',self.startup_info(artlines=not use_image))),文件“c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\apps\worker.py",第 217 行,在 startup_info 结果=self.app.backend.as_uri(),文件“c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\kombu\utils\objects.py”,第 44 行,在获取 值 = obj。dict [自我。名称] =自我。获取(obj)文件“c:\users\user \appdata\local\programs\python\python37-32\lib\site-packages\celery\app\base.py”,第 1196 行,在后端返回 self。get_backend() 文件“c:\users\user \appdata\local\programs\python\python37-32\lib\site-packages\celery\app\base.py”,第 914 行,在get_backend self.loader) 文件中“ c:\users\user \appdata\local\programs\python\python37-32\lib\site-packages\celery\app\backends.py",第 70 行,在 by_url 返回 by_name(backend, loader),url 文件" c:\用户\用户\appdata\local\programs\python\python37-32\lib\site-packages\celery\app\backends.py”,第 50 行,在 by_name cls = symbol_by_name(backend, aliases) 文件“c:\users\user_\ appdata\local\programs\python\python37-32\lib\site-packages\kombu\utils\imports.py”,第 56 行,在 symbol_by_name 模块 = imp(module_name, package=package, **kwargs) 文件“c: \users\user_\appdata\local\programs\python\python37-32\lib\importlib_ init _.py",第 127 行,在 import_module 中返回 _bootstrap._gcd_import(name[level:], package, level) File "",第 1006 行,在 _gcd_import 文件“”中,第 983 行,在 _find_and_load 文件中“”,第 967 行,在 _find_and_load_unlocked 文件中“”,第 677 行,在 _load_unlocked 文件中“”,第 724 行,在 exec_module 文件中“”,第 860 行,在 get_code 文件“”中,第 791 行,在 source_to_code 文件中“”,第 219 行,在call_with_frames_removed 文件“c:\users\user \appdata\local\programs\python\python37-32\lib\site-packages\celery\backends\redis.py”,第 22 行来自 . 导入异步,基 ^ SyntaxError:无效语法
但是,当我使用注释行时,我没有任何问题,只是结果后端被禁用,我需要将结果后端设置为 redis-server
解决方案
我解决了这个问题。问题的主要原因是我使用的是 Python 3.7。但是,据我所知,Celery 目前适用于 Python 3.6 及更低版本。我对 Celery 代码进行了以下更改:
将“C:\Users\myusername\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\celery\backends\async.py”重命名为“C:\Users\myusername\AppData\Local\Programs\ Python\Python37-32\Lib\site-packages\celery\backends\asynchronous.py"
打开 redis.py 并将每行包含关键字“async”的行更改为“asynchronous”。
显然,
异步
现在是 Python 3 中的关键字。
您还可以阅读此链接:https ://github.com/celery/celery/issues/4500
希望这个答案能帮助所有遇到相同问题的人,直到发布新版本的 Celery。
更新:这是 Python 3.7 的问题。您可以使用 Python 3.6 而不是这样的问题。但是,如果您想继续使用 Python 3.7 和 celery[redis],您可以使用上述解决方案来解决问题。
推荐阅读
- android - Retrofit2 API 请求永远不会返回。为什么?
- javascript - “npm run build”失败并出现 SyntaxError:Unexpected token
- css - 波浪下划线在铬中表现异常
- reactjs - 如何使用 React 从其子组件单击按钮时显示一组数组
- shiny - Shiny应用中用户的操作系统信息
- r - 使用 R 中的数据掩码评估最大似然表达式
- javascript - 如何在 Angular 2+ 中包含 javascipt 代码?
- angular - 循环遍历Angular中的常量
- c# - 如何在方法中更好地编写这部分代码
- android - 删除 android 片段中回收站视图上方不需要的空白空间