本文主要解决的问题是Celery依赖Flask的appcontext,但是在Flask工厂模式下会出现循环import的问题。
在工厂函数取得flask app的后边加一句,一共两句。
flask_app = create_app(FLASK_CONFIG) # 工厂函数得到flask app
flask_app.app_context().push() # 推一个appcontext
之后Celery就会处于Flask的appcontext内,不用在做其他处理了。@celery_app.task定义celery task函数,Flask模块内直接import即可。
有兴趣的话,可以去参考https://github.com/miguelgrinberg/flasky-with-celery/