代码之家  ›  专栏  ›  技术社区  ›  clstaudt

无法设置芹菜结果后端

  •  2
  • clstaudt  · 技术社区  · 5 年前

    我的第一个芹菜项目看起来是这样的-我非常关注 getting started instructions :

    from celery import Celery
    
    import time
    
    app = Celery(
        "celery_test",
        broker="redis://",
        backend="redis://"
    )
    
    @app.task
    def greet(who):
        print(f"Hello {who}")
    
    @app.task
    def add(x, y):
        return x + y
    
    @app.task
    def long(sleep_time):
        time.sleep(sleep_time)
    

    尝试通过设置结果后端 backend='redis://' 调用时导致以下语法错误 celery -A celery_test worker --loglevel=info 就像芹菜里的虫子:

    [2019-01-21 12:58:59,457: CRITICAL/MainProcess] Unrecoverable error: SyntaxError('invalid syntax', ('/Users/cls/anaconda3/lib/python3.7/site-packages/celery/backends/redis.py', 22, 19, 'from . import async, base\n'))
    Traceback (most recent call last):
      File "/Users/cls/anaconda3/lib/python3.7/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 "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/worker/worker.py", line 205, in start
        self.blueprint.start(self)
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/bootsteps.py", line 115, in start
        self.on_start()
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/apps/worker.py", line 139, in on_start
        self.emit_banner()
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/apps/worker.py", line 154, in emit_banner
        ' \n', self.startup_info(artlines=not use_image))),
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/apps/worker.py", line 217, in startup_info
        results=self.app.backend.as_uri(),
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/kombu/utils/objects.py", line 44, in __get__
        value = obj.__dict__[self.__name__] = self.__get(obj)
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/app/base.py", line 1196, in backend
        return self._get_backend()
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/app/base.py", line 914, in _get_backend
        self.loader)
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/app/backends.py", line 70, in by_url
        return by_name(backend, loader), url
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/app/backends.py", line 50, in by_name
        cls = symbol_by_name(backend, aliases)
      File "/Users/cls/anaconda3/lib/python3.7/site-packages/kombu/utils/imports.py", line 56, in symbol_by_name
        module = imp(module_name, package=package, **kwargs)
      File "/Users/cls/anaconda3/lib/python3.7/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 "/Users/cls/anaconda3/lib/python3.7/site-packages/celery/backends/redis.py", line 22
        from . import async, base
                          ^
    SyntaxError: invalid syntax
    

    我想验证这确实是一个bug,而不是我的配置问题。另外,我更愿意从异步编程开始,而不是编写错误报告,因此我们需要一个变通方法。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Anna Krogager    5 年前

    似乎芹菜还不能在Python3.7中工作,只有Python3.6或更低版本。你可以在 trouble in setting celery tasks backend in Python