在Python 中最佳化HTTP 請求調度
處理大規模HTTP 請求可能會給Python 帶來挑戰,特別是對於涉及數千個URL 的任務。本文探討了一種在 Python 2.6 中調度 100,000 個 HTTP 請求的高效解決方案,利用並發和執行緒來最大限度地提高效能。
Twistedless 解決方案:
以下程式碼片段提供一個快速有效的同時發送HTTP 請求的方法:
from urlparse import urlparse from threading import Thread import httplib, sys from Queue import Queue concurrent = 200 def doWork(): while True: url = q.get() status, url = getStatus(url) doSomethingWithResult(status, url) q.task_done() def getStatus(ourl): try: url = urlparse(ourl) conn = httplib.HTTPConnection(url.netloc) conn.request("HEAD", url.path) res = conn.getresponse() return res.status, ourl except: return "error", ourl def doSomethingWithResult(status, url): print status, url q = Queue(concurrent * 2) for i in range(concurrent): t = Thread(target=doWork) t.daemon = True t.start() try: for url in open('urllist.txt'): q.put(url.strip()) q.join() except KeyboardInterrupt: sys.exit(1)
說明:
以上是如何在 Python 2.6 中優化 100,000 個 URL 的 HTTP 請求調度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!