python的urllib2做连接池吗?

时间:2011-09-29 17:00:18

标签: java python urllib2

真正令我疑惑的是: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,但是我无法通过阅读文档告诉它是否允许设置每个主机的最大值。

1 个答案:

答案 0 :(得分:0)

从Python 2.7.14rc1开始,否。

对于urllibeventually calls httplib.HTTPurlopen()HTTPConnection creates a new instanceHTTPConnection绑定到套接字,并具有用于打开和关闭该套接字的方法。

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