我有一个python客户端,通过标准库的httlib插入数据的很大。用户complainging应用程序很慢。我怀疑这可能是部分原因是由于我使用的HTTP客户端。
我可以用别的东西代替httplib的提高性能?
我见过的扭曲提供一个HTTP客户端。它看起来比他们的其他协议(protocol)的产品是非常基本的。
PyCurl可能是一个有效的替代,但它的使用似乎是非常不Python的,而另一方面,如果它的表现真的很不错,然后我可以忍受一点未Python的代码。
所以,如果你有 python 的更好的HTTP客户端库的经验,请告诉我这件事。我想知道你认为相对于httplib的性能,你认为实现质量的什么东西。
更新0:我使用httplib的是实际上非常有限 - 更换需要做到以下几点:
conn = httplib.HTTPConnection(host, port)
conn.request("POST", url, params, headers)
compressedstream = StringIO.StringIO(conn.getresponse().read())
这就是:没有代理,重定向或任何花哨的东西。这是普通老式HTTP。我只需要能够尽快完成。
更新1:我坚持的python2.4,我使用的是Windows 32,请不要告诉我更好的方法来使用httplib的 - 我想了解一些替代httplib的的。
最佳答案
通常当我已经与httplib的性能问题,这个问题一直没有与httplib的本身,而是我如何使用它。下面是一些常见的陷阱:
(1)不要为每个Web请求都建立新的TCP连接。如果要进行大量的请求到同一台服务器,而不是这种模式:
康恩= httplib.HTTPConnection( “www.somewhere.com”)
conn.request( “GET”, '/富')
康恩= httplib.HTTPConnection( “www.somewhere.com”)
conn.request( “GET”, '/巴')
康恩= httplib.HTTPConnection( “www.somewhere.com”)
conn.request( “GET”, '/巴兹')
改为执行以下操作:
康恩= httplib.HTTPConnection( “www.somewhere.com”)
conn.request( “GET”, '/富')
conn.request( “GET”, '/巴')
conn.request( “GET”, '/巴兹')
(2)不要序列您的要求。您可以使用线程或asynccore或任何你喜欢的,但如果你正在从不同的服务器的多个请求,可以通过并行运行他们提高性能。