ホームページ >バックエンド開発 >Python チュートリアル >効率的なデータ処理のために Python で HTTP リクエストを最適化するにはどうすればよいですか?

効率的なデータ処理のために Python で HTTP リクエストを最適化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-24 12:22:34214ブラウズ

How can I optimize HTTP requests in Python for efficient data processing?

Python での HTTP リクエストの最適化

特に大規模なデータセットを扱う場合、Python で多数の HTTP リクエストを迅速に送信する必要性が頻繁に生じます。ただし、Python にはさまざまな同時実行性やスレッド化オプションがある中で、最も効率的なアプローチを選択するのは難しい場合があります。実行可能な解決策の 1 つは、シンプルかつ効果的な方法を利用することです。

効率的な HTTP リクエストの実装

次のコードは、Python (2.6) での非常に効率的な実装を示しています。互換性):

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)

説明

  • マルチスレッド: コードはマルチスレッドを使用してタスクを同時に実行します。スレッドは HTTP リクエストを独立して実行し、順次実行に比べてレイテンシを短縮します。
  • キャッシュ: キュー (q) を採用することで、コードは各スレッドの不必要な URL 解析と接続確立を回避し、さらに機能を強化します。効率。
  • スレッドの最適化: デーモン スレッドを設定することにより (t.daemon = True)、メインスレッドが予期せず終了した場合、プログラムは正常に終了します。
  • HTTP HEAD リクエスト: 「HEAD」メソッドは、Web ページ全体をダウンロードせずにステータス コードのみを取得するために利用されます。

この最適化されたソリューションは、リソースの使用とタスクの実行のバランスをとる合理化されたアプローチを利用して、従来の方法よりも優れたパフォーマンスを発揮します。スピード。

以上が効率的なデータ処理のために Python で HTTP リクエストを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。