使用 AJP 执行从 Python 到 Java Web 服务器的请求
我必须实现一个 Python Web 应用程序,该应用程序对通过 Web 服务(带有 GET 请求和 JSON 响应的 API)提供的数据进行操作。
API服务器是用Java实现的。初步测试显示,如果通过 urllib2 进行 API 调用(针对每个请求打开和关闭连接),则会产生巨大的开销。
如果我在 API 服务器中启用 AJP,我应该使用哪个库来通过 Python 使用 AJP 协议执行请求?我用 google 搜索了 Plup,但找不到在 Python 中请求和使用数据的明确方法,而不仅仅是在其他地方代理它。
使用 AJP 是一个好的解决方案吗?显然我必须维护一个连接池来执行AJP请求,但我在Plup中找不到任何相关内容。
谢谢。
I have to implement a Python web application which operates on data available through web-services (API with GET requests and JSON responses).
The API server is implemented in Java. Preliminarily tests show significant overhead if API calls are made through urllib2 (connection is opened and closed for each request).
If I enable AJP in API server, which library should I use to perform requests using AJP protocol from Python? I googled Plup, but I can't find a clear way to request and consume data in Python, not just proxying it elsewhere.
Is using AJP a good solution? Obviously I have to maintain a connection pool to perform AJP requests, but I can't find anything related in Plup.
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不知道AJP是什么。另外,您没有打开“重大开销”的内容,所以我可能是一个可怜的人来回答这个问题。
但如果我是你,我会首先尝试一些技巧:
在 urllib2 上启用 HTTP 1.1 keep-alive
(这是使用另一个库的示例 具有保持活动功能的 Python urllib2 )
HTTP 1.1 保持活动连接不会关闭后续请求的 TCP/IP 管道。
使用 Spawning / eventlets Web 服务器为 urllib / Python 套接字执行非阻塞 IO 补丁。
http://pypi.python.org/pypi/Spawning/
这将使并行化当应用程序的开销是输入/输出而不是使用 CPU 来处理请求时,Python 会更加健壮。 JSON 解码很少受 CPU 限制。
通过这两个技巧,我们能够在来自 Microsoft IIS 支持的 API 服务器(场)的 Python Web 应用程序中每秒消耗 1000 个请求。
I have no idea what's AJP is. Also you did not open what goes to "sigfinicant overhead", so I might be a poor person to answer to this question.
But if I were you I would first try to few tricks:
Enable HTTP 1.1 keep-alive on urllib2
(here is an example using another library Python urllib2 with keep alive )
HTTP 1.1 keep-alive connections do not close TCP/IP pipe for the subsequent requests.
Use Spawning / eventlets web server which does non-blocking IO patch for urllib / Python sockets.
http://pypi.python.org/pypi/Spawning/
This will make parallelization in Python much more robust, when the overhead in the application is input/output, not using CPU to process the requests. JSON decoding is rarely CPU bound.
With these two tricks we were able to consume 1000 request/sec in our Python web application from Microsoft IIS backed API server (farm).