3

我正在使用 gevent + bottle 进行以下操作:

  1. 在远程服务器上调用 API 方法
  2. API 处理结果
  3. 返回 HTML

我已经为 API 调用(httplib/socket)设置了一个 tiemout,但如果它设置为 5 秒(例如),我的 python 脚本在那段时间很忙,无法返回任何其他页面(这是正常的)。

问题:我能否巧妙地使用 gevent(可能是在单独的脚本中?)来处理如此长的请求?

我正在考虑在 localhost:8080 上启动一个单独的 API 询问脚本并将其放在负载均衡器后面(如“Internet”所建议的那样),但我确信有更好的方法。

我不是一个经验丰富的程序员,所以谢谢你的帮助!

4

1 回答 1

11

实际上,您的问题不应该存在。gevent 服务器后端可以同时处理任意数量的请求。如果一个被阻塞 5 秒,这不会影响到达服务器的其他请求。这就是 gevent 服务器后端的重点。

1)您确定您正确使用gevent服务器后端吗?而不仅仅是 wsgiref 默认服务器(单线程)的猴子补丁版本?

2)您是否通过启动服务器bottle.py --server gevent?如果没有,您gevent.monkey.patch_all()在导入所有其他与套接字相关的东西(包括瓶子)之前是否这样做过?

例子:

from gevent import monkey
monkey.patch_all()
import bottle
import urllib2

@bottle.route(...)
def callback():
   urllib2.open(...)

bottle.run(server='gevent')
于 2013-01-28T13:50:56.860 回答