求问一个关于 Django 线程的问题

2019-11-29 17:35:24 +08:00
 NewConn

整个 web 服务是用 ssh 连接到另一台机器抓包的。 最近发现 Django 启动后,线程数一直增长,最后服务就崩掉了。 经过排查,原因是服务有一个接口是前端用来周期性查询已抓包数量的,大概 2s 一次;每次查询包数量都是一次请求;当抓包的时候,服务的线程数以肉眼可见速度增长,初步断定就是报文查询接口导致的。 这一块功能没有使用任何多线程,应该就是每次 request 来之后,Django 框架生成的线程。 我的疑惑是当一次请求结束后,Django 不会结束或者复用当前线程吗?有什么办法可以避免这种情况。 先谢过 V 友

2872 次点击
所在节点    Python
7 条回复
676529483
2019-11-29 17:51:23 +08:00
会结束线程,是不是没有正常退出?如果真的很经常请求,可以用 channels 走 websocket
Leigg
2019-11-29 18:43:31 +08:00
请求有及时返回吗?代码有没有问题啊?这种情况百分之九十九是写的代码有问题
Ehco1996
2019-11-30 09:44:50 +08:00
怎么起 django 的?
前面有一层 webserver 做代理么?
比如 uwsgi -gunicorn 之类的

实际上 webserver 之前应该再套一层反代比如 nginx 之类的来做负载均衡
NewConn
2019-11-30 10:01:07 +08:00
@Leigg 代码功能是没有问题的,最后排除发现是查询报文数量后,ssh 连接没有关,导致线程不能正常消亡;在查询完报文数量把 ssh 连接关掉就可以解决问题。谢谢解答
hustlibraco
2019-11-30 10:16:08 +08:00
ssh 链接不要复用,经常会莫名其妙 block。还是用到的时候再初始化对象吧,开销也没多大
Hopetree
2019-11-30 16:50:48 +08:00
保存状态的话,丢到 redis 里面试试,不知道 ssh 的连接状态 redis 能不能保存,有可能转换一下格式可以存起来后续调用,但是感觉这样反而不如每次单独连接稳妥
U87
2019-12-10 19:02:46 +08:00
@Ehco1996 知乎小哥。。哈哈哈

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

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

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

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

© 2021 V2EX