【发布时间】:2011-09-29 17:00:18
【问题描述】:
我真正想知道的是:python 的 urllib2 更像 java 的 HttpUrlConnection,还是更像 apache 的 HttpClient?而且,最终我想知道 urllib2 在 http 服务器中使用时是否可以扩展,或者当性能成为问题时(如 java 世界中的情况)是否使用了一些备用库。
稍微扩展一下我的问题:
Java 的 HttpUrlConnection 在内部保持每个主机打开一个连接,并进行流水线操作。因此,如果您跨线程同时执行以下操作,它的性能将不会很好:
HttpUrlConnection cxn = new Url('www.google.com').openConnection();
InputStream is = cxn.getInputStream();
相比之下,apache的HttpClient可以用一个连接池来初始化,像这样:
// this instance can be a singleton and shared across threads safely:
HttpClient client = new HttpClient();
MultiThreadedHttpConnectionManager cm = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams p = new HttpConnectionManagerParams();
p.setMaxConnectionsPerHost(HostConfiguration.ANY_HOST_CONFIGURATION,20);
p.setMaxTotalConnections(100);
p.setConnectionTimeout(100);
p.setSoTimeout(250);
cm.setParams(p);
client.setHttpConnectionManager(cm);
上面示例中的重要部分是总连接数和每个主机的连接数是可配置的。
在评论中提到了 urllib3,但我无法通过阅读文档来判断它是否允许设置每个主机的最大值。
【问题讨论】:
-
我不确定你提到的这两个,但请查看 urllib3 以了解连接池:code.google.com/p/urllib3
-
@pastylegs:谢谢,请参阅我更新的问题。