我有一个python客户端,通过标准库的httlib推送大量数据.用户抱怨应用程序运行缓慢.我怀疑这可能部分是由于我使用的HTTP客户端.
我可以通过用其他东西替换httplib来提高性能吗?
我已经看到twisted提供了一个HTTP客户端.与其他协议产品相比,它似乎非常基础.
PyCurl可能是一个有效的替代方案,但它的使用似乎非常非pythonic,另一方面,如果它的性能非常好,那么我可以忍受一些非pythonic代码.
所以,如果您有更好的Python客户端库经验,请告诉我.我想知道你对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连接.如果您向同一服务器发出大量请求,而不是此模式:
conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/foo') conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/bar') conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/baz')
改为:
conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/foo') conn.request("GET", '/bar') conn.request("GET", '/baz')
(2)不要序列化您的请求.您可以使用线程或asynccore或任何您喜欢的,但如果您从不同的服务器发出多个请求,您可以通过并行运行来提高性能.
用户抱怨应用程序运行缓慢.我怀疑这可能部分是由于我使用的HTTP客户端.
我可以通过用其他东西替换httplib来提高性能吗?
你怀疑它还是你确定那是它httplib
?在您采取任何措施来改善应用性能之前的配置文件.
我已经找到了自己的直觉,花时间往往非常糟糕(假设没有一些代码内核执行数百万次).实现某些东西以提高性能然后拉起应用程序并发现它没有任何区别真的令人失望.
如果你没有剖析,你就是在黑暗中拍摄!
PyCurl非常棒,性能极高.