Python での HTTP リクエスト ディスパッチの最適化
大規模な HTTP リクエストの処理は、特に数千の URL を含むタスクの場合、Python で課題となる可能性があります。 。この記事では、同時実行性とスレッド化を活用してパフォーマンスを最大化する、Python 2.6 で 100,000 の HTTP リクエストをディスパッチするための非常に効率的なソリューションについて説明します。
ツイストレス ソリューション:
次のコード スニペットは、次のコード スニペットを提供します。 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)
説明:
このアプローチは、Twisted ベースのソリューションよりも高速であると同時に、CPU 使用率も削減されることが示されています。これは、Python 2.6 で大規模な HTTP リクエストを処理するための非常に効率的で信頼性の高い方法を提供します。
以上がPython 2.6 で 100,000 URL の HTTP リクエストのディスパッチを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。