Flask 应用上下文和 celery 集成

Flask app context and celery integration

将 celery 与 Flask 应用程序集成时,celery 是否需要了解 Flask 应用程序上下文?

我可以做类似的事情吗:

import celery from Celery

celery = Celery()

@task
def mytask():

或者我必须这样做:

def make_celery(app=None):
    app = app or create_app(os.getenv('FLASK_CONFIG') or 'default')
    celery = Celery(__name__, broker=app.config.CELERY_BROKER_URL)
    celery.conf.update(app.conf)
    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

然后 运行 芹菜 = make_celery(app)?

Celery 任务只需要知道应用程序上下文,如果你正在做需要它的事情(数据库查询等)。否则,您可以按原样使用 Celery。