我正在使用python的urllib2庫向特定主機發出多個http請求。每次發出請求時,都會創建一個新的tcp和http連接,這會花費大量時間。有沒有辦法讓使用urllib2的tcp/http連接保持活動狀態?如何在做多個請求時加速Python的urllib2
19
A
回答
25
如果切換到httplib,您將更好地控制底層連接。
例如:
import httplib
conn = httplib.HTTPConnection(url)
conn.request('GET', '/foo')
r1 = conn.getresponse()
r1.read()
conn.request('GET', '/bar')
r2 = conn.getresponse()
r2.read()
conn.close()
這將發送相同的基礎TCP連接上2 HTTP的GET。
2
我以前使用第三方庫urllib3
效果不錯。它旨在通過彙集連接以便重用來補充urllib2
。從the wiki
修改例如:
>>> from urllib3 import HTTPConnectionPool
>>> # Create a connection pool for a specific host
... http_pool = HTTPConnectionPool('www.google.com')
>>> # simple GET request, for example
... r = http_pool.urlopen('GET', '/')
>>> print r.status, len(r.data)
200 28050
>>> r = http_pool.urlopen('GET', '/search?q=hello+world')
>>> print r.status, len(r.data)
200 79124
+0
我無法找到此庫,鏈接已死亡。你介意看看http://stackoverflow.com/questions/18221809/sending-a-few-requests-using-one-connection? – 2013-08-14 04:01:50
0
如果你需要的東西比普通httplib的更加自動化,這可能幫助,但它不是線程安全的。
try:
from http.client import HTTPConnection, HTTPSConnection
except ImportError:
from httplib import HTTPConnection, HTTPSConnection
import select
connections = {}
def request(method, url, body=None, headers={}, **kwargs):
scheme, _, host, path = url.split('/', 3)
h = connections.get((scheme, host))
if h and select.select([h.sock], [], [], 0)[0]:
h.close()
h = None
if not h:
Connection = HTTPConnection if scheme == 'http:' else HTTPSConnection
h = connections[(scheme, host)] = Connection(host, **kwargs)
h.request(method, '/' + path, body, headers)
return h.getresponse()
def urlopen(url, data=None, *args, **kwargs):
resp = request('POST' if data else 'GET', url, data, *args, **kwargs)
assert resp.status < 400, (resp.status, resp.reason, resp.read())
return resp
相關問題
- 1. 我如何加快速度? (urllib2,請求)
- 2. Python的urllib2的請求超時
- 3. 如何使用python httplib或urllib2做Google API批量請求?
- 4. python在響應之前的urllib2請求
- 5. 用python請求和urllib2解釋POST多部分請求
- 6. 如何從請求到Urllib2
- 7. 可能做Appengine urlfetch或urllib2 HEAD請求?
- 8. 的Python - urllib2.HTTPError 400錯誤的請求
- 9. Python的urllib2的請求HTTPS失敗
- 10. Python的urllib2的請求錯誤
- 11. Python urllib2或請求後的方法
- 12. 使用Python的urllib2發起請求
- 13. 同時使用urllib2.urlopen()的多個請求
- 14. 從urllib2遷移到請求python 2.7
- 15. https使用python獲取請求urllib2
- 16. GEVENT打破請求/ urllib2的超時
- 17. Python,gevent,urllib2.urlopen.read(),下載加速器
- 18. 加速HTTP請求python和500錯誤
- 19. 獲取的urllib2 http請求
- 20. urllib2的請求發出
- 21. 如何在我的情況下做出多個http請求?
- 22. 在Python 2.x中快速創建多個SSL請求
- 23. Python:同時發出多個HTTP請求
- 24. Python和urllib2:如何使用參數進行GET請求
- 25. Python,請求,線程,python請求關閉其套接字的速度有多快?
- 26. 如何來加速HTTP請求
- 27. 如何做一個角度多個參數的獲取請求
- 28. 如何在請求python庫中限制HTTP請求的下載速度?
- 29. 如何加速Ajax請求Python Youtube刮板
- 30. 我可以做多個SQL請求作爲一個請求
這是一個很好的答案,因爲httplib是python的一部分。這使我們不必安裝第三方模塊。謝謝! – 2013-04-14 16:54:25
也許這會對有用的人有用,也有HTTPSConnection。 – Petr 2016-05-12 12:26:17