[ 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 -A tasks worker --loglevel=info
バックエンドの設定で構文エラーが発生します。これはエラーメッセージです。
[2018-07-10 16:37:21,970: CRITICAL/MainProcess] Unrecoverable error: 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 (most recent call last): File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\kombu\utils\objects.py", line 42, in __get__ return obj.__dict__[self.__name__] KeyError: 'backend' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\worker\worker.py", line 205, in start self.blueprint.start(self) File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\bootsteps.py", line 115, in start self.on_start() File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\apps\worker.py", line 139, in on_start self.emit_banner() File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\apps\worker.py", line 154, in emit_banner ' \n', self.startup_info(artlines=not use_image))), File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\apps\worker.py", line 217, in startup_info results=self.app.backend.as_uri(), File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\kombu\utils\objects.py", line 44, in __get__ value = obj.__dict__[self.__name__] = self.__get(obj) File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\app\base.py", line 1196, in backend return self._get_backend() File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\app\base.py", line 914, in _get_backend self.loader) File "c:\users\user_\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_\appdata\local\programs\python\python37-32\lib\site-packages\celery\app\backends.py", line 50, in by_name cls = symbol_by_name(backend, aliases) File "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) File "c:\users\user_\appdata\local\programs\python\python37-32\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 724, in exec_module File "<frozen importlib._bootstrap_external>", line 860, in get_code File "<frozen importlib._bootstrap_external>", line 791, in source_to_code File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\backends\redis.py", line 22 from . import async, base ^ SyntaxError: invalid syntax
ただし、代わりにコメント行を使用すると、結果バックエンドが無効になり、結果バックエンドをredis-serverに設定する必要があるという問題はありません
私は問題を解決しました。問題の主な原因は、Python 3.7を使用していたことです。しかし、私の知る限り、Celeryは現在Python 3.6以前で動作します。セロリのコードへの以下の変更:
「C:\ Users\myusername\AppData\Local\Programs \」に「C:\ Users\myusername\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\celery\backends\async.py」に名前を変更しましたPython\Python37-32\Lib\site-packages\celery\backends\asynchronous.py "
Redis.pyを開き、キーワード "async"を持つすべての行を "asynchronous"に変更しました。
どうやら、
async
Python 3.のキーワードになりました。
このリンクを読むこともできます: https://github.com/celery/celery/issues/45
うまくいけば、この答えは、新しいバージョンのCeleryがリリースされるまで、同じ問題を抱えているすべての人に役立つでしょう。
更新:これはPython 3.7の問題です。代わりにPython 3.6を使用しても、そのような問題はありません。ただし、=を使用して続行する場合はPython 3.7 and celery [redis]上記のソリューションを使用して問題を解決できます。
@Ai Daをサポートし、redis.pyでAsyncBackendMixin
を維持する必要があります。
バックエンドパラメータにredisポートとdbを追加してみましたか?または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
私のために働く