Python gevent+瓶子。查询 API。如何使用gevent防止超时锁?

标签 python api asynchronous timeout gevent

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

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

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

问题: 我能以某种方式巧妙地使用 gevent(也许在单独的脚本中吗?)来处理如此长的请求?

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

我不是经验丰富的程序员,所以感谢您的帮助!

最佳答案

其实你的问题不应该存在。 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')

关于Python gevent+瓶子。查询 API。如何使用gevent防止超时锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559135/

相关文章:

python - 如何阻止显示分辨率影响 pyqtgraph 图中的轴

python - 如何从 Python 使用 C++ OSG 对象?

python - sqlalchemy 查询 : select using list of tuples

android - 屏幕方向期间 fragment 内的异步任务

python - OpenCV-Python导入错误: DLL load failed: The specified module could not be found

javascript - 添加对 API 的获取请求的限制/延迟

php - Facebook API 搜索。

ruby-on-rails - 在 View 中显示来自 api 的 JSON 响应

Python 相当于 Perl 的 HTTP::Async->next_response

python - 在python中使用opencv流式传输的视频的异步列表