【问题标题】:Unable to start Celery in Flask application无法在 Flask 应用程序中启动 Celery
【发布时间】:2021-06-08 23:54:32
【问题描述】:

尝试启动 Celery worker (Windows) 时出现以下错误。

我正在使用 Celery 5.0.5。

celery.exe -A api.app -> ModuleNotFoundError: No module named 'api'

ma​​in.py

import os

from api.app import create_app

app = create_app(os.getenv("FLASK_ENV"))

if __name__ == '__main__':
    app.run(threaded=True, host='0.0.0.0')

api\app.py

from celery import Celery
from flask import Flask
from flask_redis import FlaskRedis
from flask_restful import Api
from api.config import env_config


redis_client = FlaskRedis()
celery = Celery(__name__, broker="redis://...")


def create_app(config_name):
    import resources

    app = Flask(__name__)
    app.config.from_object(env_config[config_name])
    redis_client.init_app(app)

    app.config.update(
        CELERY_BROKER_URL="redis://...",
        CELERY_RESULT_BACKEND="redis://..."
    )
    celery.conf.update(app.config)

    with app.app_context():
        from .routes import ccl_routes
        from .routes import scan_routes

    return app

文件夹结构如下:

helheim
| |api
|   |app.py
|   |__init.py__
|main.py

我做错了什么?这里已经很晚了,所以可能很明显但看不到它:)

谢谢!

【问题讨论】:

    标签: python-3.x flask celery


    【解决方案1】:

    编辑:我认为您可以在进行任何重大更改之前尝试celery -A api.app.celery worker

    不知道你的整个文件结构是什么样的,但例如

    project
    | |_api
    |   |_app
    _...
    

    您应该以celery -A project.api.app.celery worker 开头。将 .celery 替换为您的 celery 实例名称。或者你也可以参考这个repo https://github.com/mushcatshiro/flask-template

    还请注意,根据我的经验,在 Windows 上使用 celery 4.X 有点挑战性,请改用 celery 5.0。

    【讨论】:

    • 这对我来说不太适用。我已经用我的文件夹结构更新了我的问题
    • hmmm 在我的情况下,我有一个单独的文件来调用 celery 实例 flask-template/backend/celery_worker.py 您可能想尝试一下。我知道有一个额外的文件有点乱,但这是迄今为止设法让事情正常进行的唯一方法。
    • helheim下创建一个__init__.py文件,并在一个单独的终端中使用celery -A helheim.api.app.celery worker启动celery
    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 2020-01-03
    • 1970-01-01
    • 2022-10-08
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多