需求 :在写的一个服务基于 Django 框架,有 http 请求的处理和监听 Kafka 的消息队列。为了解决题目提出的问题还集成了 celery,但是还没找到合适的用法。我是希望 Django 程序启动结束之后就调用我写好的创建线程或者进程的函数( Django 未启动完成运行 Kafka 监听的代码会提示未加载完成的错误)。
我现有的方案是在 celery 的 tasks 编写一个 sharetask 去执行启动监听线程的方法。然后 task 的调用写在 urls.py 。项目启动完成之后就会运行目标代码。
但是上面的方案会导致我启动线程的代码被执行两次,影响到了我监听的处理逻辑。
看到的其他方法:
- 查到有人提到可以用 middleware,但是觉得这不是 http 请求生命周期里面的工作,觉得不适用。
- 也看到用 AppConfig 的,但是重载这个的 ready 方法,去执行我的函数,会提示未加载完成错误,也不适用。
所以请教各位大大有什么更好的方法?