1. ホーム
  2. python

[解決済み] Pythonで100,000のHTTPリクエストを送信する最速の方法は何ですか?

2022-03-16 06:47:57

質問

100,000のURLを持つファイルを開いています。 私は、各URLにHTTPリクエストを送信し、ステータスコードを表示する必要があります。私はPython 2.6を使用しており、これまでPythonがスレッド/同時実行を実装する多くの混乱した方法について見てきました。 私はさらに、Pythonの 同時進行 ライブラリがありますが、このプログラムをどう書けば正しいのかがわかりません。 どなたか同じような問題に遭遇された方はいらっしゃいませんか? 私は一般的に、Pythonで何千ものタスクをできるだけ速く実行する方法を知る必要があると思います - それは「同時進行」を意味すると思います。

どのように解決するのですか?

ツイストレスで解決。

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 solutionよりも若干高速で、CPUの使用量も少なくなっています。