api请求相应需要20s左右,tornado能应付吗?

2013-07-11 15:17:46 +08:00
 BeanYoung
需求是这样的,app调用api,但某些api需要20s左右的执行响应时间。
目前的做法是,前端调用api,服务端收到请求后,将主要的耗时运算添加到任务队列,然后api马上返回,前端每隔几秒重新调用这个api,获取那个耗时运算的计算结果。目前用到的东西主要是flask+rq。
这个方法目前运转良好,不过现在要将系统的api开放给其他公司使用,对方希望api能够一次就返回计算结果。
如果按照对方的需求,每次请求都需要20s,甚至更长时间才能响应,这种事情应该用什么方案来做?用tornado能解决这个问题吗?或者是需要用其他更擅长处理这样请求的技术,比如golang或者erlang?
3758 次点击
所在节点    Python
6 条回复
lookhi
2013-07-11 15:26:33 +08:00
把你现在的做法再包装一层,与用户那个链接不断就好了。
dancercl
2013-07-11 15:36:53 +08:00
golang做这个很容易
qiongqi
2013-07-11 15:41:27 +08:00
嘿嘿,我推荐openresty,IO不阻塞
BOYPT
2013-07-11 16:26:18 +08:00
所有非阻塞模型都可以吧...

不过这样的工作模式不好,API执行过程中很可能受其他影响而中断,就没了返回结果了。
openroc
2013-07-12 11:46:08 +08:00
async + fork process + callback
Livid
2013-12-14 03:41:12 +08:00
对方的这个需求真的不太合理。

对于耗时的任务,第一次 API call 的时候,可以立刻返回一个 Async job ID,然后对方的后续的请求,根据这个 Async job ID 来取结果。结果应该是存放在 Memcache 里的,可以高速访问。

很多 Cloud 平台的 API 就是这样的,比如你要创建一台 VM,显然是不可能立刻返回结果的。而是返回一个 job ID。

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

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

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

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

© 2021 V2EX