在将芹菜与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
然后运行celery = make_celery(app)?
答案 0 :(得分:1)
如果您正在执行需要它的事情(数据库查询等),Celery任务只需要知道应用程序上下文。否则你可以按原样使用Celery。