如题,诉求是,能够在 Celery 中正常使用 Flask 的上下文。按照 Flask 文档 Celery Background Tasks 的示例,在 Celery App 创建和修改 Task 类的时候需要 Flask App。这就有一个死循环:
- Celery task 定义时需要 Celery app 实例;
- Celery app 创建时需要 Flask app 实例,需要获取配置,重写 Task 类已在 Flask 上下文中执行任务;
- Flask app 是在运行时延迟创建的。
不知道大家都是怎么做的? 我自己实现了一个丑陋的方法——flask-with-celery-example,大家给给意见有没有漏洞或者 bug 啥的。
刚刚想到另一种方法是:
-
把 Celery APP 的配置独立出来,不使用 Flask 的配置,此时不需要 Flask App 作为参数创建 Celery App,可以正常的写任务;
-
在 Flask App 创建的文件中,导入 Celery App,并重写
celeryapp.Task。