怎么实现 Django 在启动完成之后调起线程去监听数据源?困扰太久,求戳

2017-11-07 08:56:16 +08:00
 toono

需求 :在写的一个服务基于 Django 框架,有 http 请求的处理和监听 Kafka 的消息队列。为了解决题目提出的问题还集成了 celery,但是还没找到合适的用法。我是希望 Django 程序启动结束之后就调用我写好的创建线程或者进程的函数( Django 未启动完成运行 Kafka 监听的代码会提示未加载完成的错误)。

我现有的方案是在 celery 的 tasks 编写一个 sharetask 去执行启动监听线程的方法。然后 task 的调用写在 urls.py 。项目启动完成之后就会运行目标代码。

但是上面的方案会导致我启动线程的代码被执行两次,影响到了我监听的处理逻辑。

看到的其他方法:

  1. 查到有人提到可以用 middleware,但是觉得这不是 http 请求生命周期里面的工作,觉得不适用。
  2. 也看到用 AppConfig 的,但是重载这个的 ready 方法,去执行我的函数,会提示未加载完成错误,也不适用。

所以请教各位大大有什么更好的方法?

7911 次点击
所在节点    Python
22 条回复
wizardoz
2017-11-07 13:24:20 +08:00
如果是需要同步监听的话还是建议单独开一个进程去监听,有数据以后 POST 到 django 或者通过消息队列。
celery 的定时任务我觉得不适合这种场景。
PS:在 wsgi.py 中可以直接开线程或者进程。但是如果是我的话还是会单独另起一个程序。
clino
2017-11-07 13:35:47 +08:00
建议用 jenkins 之类的另外的工具去做

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/404161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX