因为接口的一部分请求超时导致这个接口完全不可用怎么办?

2017-03-28 21:20:32 +08:00
 chenqh
1. 语言: python
2. 框架: tornado+gevent 。。我这里是把 tornado 当 flask 来用的
3. 在对于路由 url_pathA的处理里面:我需要向 根据参数来决定 向 urlA 还是 urlB 请求,再根据请求结果响应.设置了超时为 1s
4. 对于 url_pathA,supervisor 起两个进程来处理

现有遇到的问题是 urlA 没有响应,导致只有超时响应。。 而现在其他请求( handler 不是请求 urlA 的请求)也没有响应了,我知道的原因是因为urlA导致的,把请求要urlA的请求干掉响应就正常了,但是这不解决办法,我想知道 这种问题应该怎么解决?

3775 次点击
所在节点    Python
8 条回复
laball
2017-03-28 21:26:00 +08:00
处理多个请求的时候,应该是并行的啊,你这个怎么感觉成了串行的了。
chenqh
2017-03-28 21:28:20 +08:00
@laball 什么意思 ?我的意思对于接口 A ,只有两个进程来响应,因为一部分请求需要 1S 来响应,导致其他请求在排队,这种问题应该怎么解决呢?
lovedboy
2017-03-28 21:40:00 +08:00
打 patch 生效了么?用了阻塞的 C 库?
chenqh
2017-03-28 21:44:58 +08:00
@lovedboy 不懂,我用的 request 库。。应该生效了吧。。
shuax
2017-03-28 22:16:18 +08:00
@chenqh 要用 tornado 的异步起来
chenqh
2017-03-28 22:38:31 +08:00
@shuax tornado 没有异步 orm ,用不起来了。。而且现在很多都是用 peewee 做 orm 的
gulu
2017-03-28 22:46:55 +08:00
不要用 requests ,用 tornado 自己的 AsyncHttpClient 。
不用异步 ORM 不代表完全不能用异步,如果数据库查询成了瓶颈,那就要优化数据库。但你这里很明显是 requests 网络请求阻塞了线程啦。
laball
2017-04-01 10:38:14 +08:00
@chenqh 直接使用异步操作吧。这样就不会阻塞当前线程了。

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

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

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

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

© 2021 V2EX