【问题标题】:does python's urllib2 do connection pooling?python的urllib2做连接池吗?
【发布时间】: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:谢谢,请参阅我更新的问题。

标签: java python urllib2


【解决方案1】:

从 Python 2.7.14rc1 开始,没有。

对于urlliburlopen()eventually calls httplib.HTTPcreates a new instanceHTTPConnectionHTTPConnection 绑定到一个套接字并具有打开和关闭它的方法。

对于urllib2HTTPHandler does something similar 并创建HTTPConnection 的新实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多