簡體   English   中英

在 Python 中設置 celery 任務后端的麻煩

[英]trouble in setting celery tasks backend in Python

我按照 [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')) 回溯(最近一次調用):文件“c:\\users\\user_\\appdata\\local\\programs \\python\\python37-32\\lib\\site-packages\\kombu\\utils\\objects.py”,第 42 行,在get return obj 中。 dict [自己。 name ] KeyError: 'backend' 在處理上述異常時,發生了另一個異常:Traceback (most recent call last): File "c:\\users\\user_\\appdata\\local\\programs\\python\\python37-32\\lib\\site -packages\\celery\\worker\\worker.py”,第 205 行,在啟動 self.blueprint.start(self) 文件“c:\\users\\user_\\appdata\\local\\programs\\python\\python37-32\\lib\\site- package\\celery\\bootsteps.py”,第 115 行,在啟動 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 results=self.app.backend.as_uri(),文件“c:\\users\\user_\\appdata\\local\\programs\\python\\python37-32\\lib\\site -packages\\komb u\\utils\\objects.py”,第 44 行,在get value = obj 中。 dict [自己。 姓名] = 自我。 get(obj) 文件“c:\\users\\user\u003c/em> \\appdata\\local\\programs\\python\\python37-32\\lib\\site-packages\\celery\\app\\base.py”,第 1196 行,在后端返回 self. get_backend() 文件“c:\\users\\user\u003c/em> \\appdata\\local\\programs\\python\\python37-32\\lib\\site-packages\\celery\\app\\base.py”,第 914 行,在get_backend self.loader 中的文件“ c:\\users\\user\u003c/em> \\appdata\\local\\programs\\python\\python37-32\\lib\\site-packages\\celery\\app\\backends.py", line 70, in by_url return by_name(backend, loader), url File " c:\\users\\user\u003c/em> \\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", line 56, in symbol_by_name module = imp(module_name, package=package, ** kwargs)文件“C:\\用戶\\用戶_ \\應用程序數據\\本地\\程序\\ python的\\ python37-32 \\ LIB \\ importlib_初始化_.py”,第127行,在import_module回報_bootstrap._gcd_import(名稱[級別:],包, level) File "", line 1006, in _gcd_import File "", line 983, in _find_and_load File "", line 967, in _find_and_load_unlocked File "", line 677, in _load_unlocked F 文件“”,第 724 行,在 exec_module 文件“”,第 860 行,在 get_code 文件“”,第 791 行,在 source_to_code 文件“”,第 219 行,在call_with_frames_removed 文件“c:\\users\\user\u003c/em> \\appdata\\local\\programs \\python\\python37-32\\lib\\site-packages\\celery\\backends\\redis.py”,來自 . 導入異步,基 ^ 語法錯誤:語法無效

但是,當我使用注釋行時,我沒有問題,只是結果后端被禁用,我需要將結果后端設置為 redis-server

我解決了這個問題。 問題的主要原因是我使用的是 Python 3.7。 但是,據我所知,Celery 目前適用於 Python 3.6 及更低版本。 我對 Celery 代碼進行了以下更改:

  1. 將“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"

  2. 打開 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],您可以使用上述解決方案來解決問題。

支持@Ai大,你應該保持AsyncBackendMixin在redis.py。

您是否嘗試在后端參數中添加 redis 端口和數據庫? 或者在 Celery 配置文件中添加參數 CELERY_REDIS_HOST CELERY_REDIS_PORT CELERY_REDIS_DB CELERY_RESULT_BACKEND CELERY_RESULT_PASSWORD

看起來像安裝

pip install git+https://github.com/vBlackOut/django-celery.git --upgrade

為我工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM