【问题标题】:Unable to start the celery workers (Flask Application)无法启动芹菜工人(Flask 应用程序)
【发布时间】:2019-04-23 09:10:39
【问题描述】:

我正在用 Python Flask 尝试 celery。

celery_example.py

​​>
from __future__ import absolute_import, unicode_literals
from flask import Flask
from flask_celery import make_celery

flask_app = Flask(__name__)
flask_app.config.update(
    CELERY_BROKER_URL='amqp://rsrc:rsrc@localhost:5672/localhost',
    CELERY_RESULT_BACKEND='db+postgresql://postgres:postgres@localhost/rsrc_celery'
)

celery = make_celery(flask_app)

@flask_app.route('/process/<name>')
def process(name):
    reverse.delay(name)
    return "Async !"


@celery.task(name="celery_example.reverse")
def reverse(nm):
    return nm[::-1]

if __name__ == "__main__":
    flask_app.run(debug=True)

flask_celery.py

​​>
from __future__ import absolute_import, unicode_literals
from celery import Celery

def make_celery(app):
    celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery

FLask 服务器已启动并运行良好,我可以调用已定义的路由。 但我无法启动 Celery worker (celery worker -A celery_example.celery --loglevel=info) 这是我经常遇到的错误。

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 10, in <module>
    sys.exit(main())
  File "/Library/Python/2.7/site-packages/celery/__main__.py", line 16, in main
    _main()
  File "/Library/Python/2.7/site-packages/celery/bin/celery.py", line 322, in main
    cmd.execute_from_commandline(argv)
  File "/Library/Python/2.7/site-packages/celery/bin/celery.py", line 496, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/Library/Python/2.7/site-packages/celery/bin/base.py", line 290, in execute_from_commandline
    self.on_error(UNABLE_TO_LOAD_APP_MODULE_NOT_FOUND.format(e.name))
AttributeError: 'exceptions.ImportError' object has no attribute 'name'

我的目录结构是

--Flask_Celery
   -- celery_example.py
   -- flask_celery.py
   -- __init__.py

【问题讨论】:

    标签: python flask rabbitmq celery


    【解决方案1】:

    好吧,问题出在环境上。

    我是通过“virtualenv env”创建环境,它是用python创建环境,而我需要python3环境。

    所以,我使用“python3 -m venv env”创建了虚拟环境,然后加载了解决错误的所有依赖项。

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 2018-05-23
      • 1970-01-01
      • 2018-07-10
      • 2017-04-16
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多