请教一个 Python 做服务器接口的问题

2016-06-09 10:44:19 +08:00
 icaics

初学 Python ,想做个接口玩玩

用的是 BaseHTTPRequestHandler 类, 里面有 do_get 方法, 启动的时候用: httpd = HTTPServer(('', 8082), MyHttpHandler) httpd.serve_forever() 保持一直运行。

部署到服务器上, CentOS 的系统,然后开 screen 运行 .py 文件, 然后 Detached 这个 Screen 让他在后台运行。

一般开始一段时间都能响应请求, 但是一般一天以后我再发请求,就没有响应了,一直等待,然后就超时了, 看样子是接口没有响应这个请求,网络应该是没问题的。

返回后台的 screen 看打印信息,每个请求我都会 print 一下, 会卡在某一个请求,然后按 Ctrl + C ,不会马上终止, 而是 screen 更新到最新的那个请求 print 的信息, (有点程序挂起了,然后通过 Ctrl + C 重新唤醒的感觉) 然后再按 Ctrl +C ,才会出现 keyboard 终止程序那个提示,

按说我返回 screen 然后 Ctrl + C ,应该立马结束程序才对, 这里第一次会更新 screen 显示的内容,第二次才结束运行。

想知道是我 Python 的代码有问题导致卡住了, 比如同时请求次数太多(并发不会很高,一般也就 100 以内)导致卡死, 或者说代码逻辑有问题, 还是使用 Screen 的姿势不对?

第一次发帖,这排版怎么搞的...

2816 次点击
所在节点    Python
5 条回复
ryd994
2016-06-09 12:28:43 +08:00
httpserver 那是单线程的吧……
用 threadedtcpserver 试试或者自己用 httpserver 和 ThreadingMixIn 继承一个出来
jamiesun
2016-06-09 17:33:52 +08:00
不是事实 bottle 库,只有一个文件的 web 框架
icaics
2016-06-09 20:23:47 +08:00
@ryd994 感谢
LPeJuN6lLsS9
2016-06-11 19:46:28 +08:00
响应请求的时候都做了啥,有没有请求其他什么互联网上的服务?

只想着换多线程而不是找出到底卡在哪儿了真的没问题吗,会不会一段时间后线程越来越多?
icaics
2016-06-20 16:12:49 +08:00
@hantsuki 感谢回复,失去响应的问题肯定要查,我已经用 ThreadingMixIn 先搞成多线程了,当时比较急,问题最后肯定要修复

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

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

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

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

© 2021 V2EX