将芹菜与 Flask 应用程序
集成时,芹菜是否需要了解 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(应用程序)?
Celery 任务只需要知道应用程序上下文,如果你正在做需要它的事情(数据库查询等)。否则,您可以按原样使用芹菜。