私は過去2日間マルチスレッド機能を備えたスクレーパーを構築しようとしていました。どういうわけか私はまだそれを管理することができませんでした。最初はスレッディングモジュールで通常のマルチスレッドアプローチを試みましたが、シングルスレッドを使用するよりも速くはありませんでした。後でリクエストがブロックされ、マルチスレッドアプローチが実際には機能していないことがわかりました。だから、私は研究を続けて、グレクエストとgeventについて知っていました。現在、私はgeventでテストを実行していますが、1つのスレッドを使用するよりも速くはありません。私のコーディングは間違っている?ここでマルチスレッドでのPythonリクエスト
は私のクラスの関連する部分である:
import gevent.monkey
from gevent.pool import Pool
import requests
gevent.monkey.patch_all()
class Test:
def __init__(self):
self.session = requests.Session()
self.pool = Pool(20)
self.urls = [...urls...]
def fetch(self, url):
try:
response = self.session.get(url, headers=self.headers)
except:
self.logger.error('Problem: ', id, exc_info=True)
self.doSomething(response)
def async(self):
for url in self.urls:
self.pool.spawn(self.fetch, url)
self.pool.join()
test = Test()
test.async()
あなたの輸入品はどこですか?また、 'multiprocessing'モジュールを試しましたか? – Will
私はインポートを追加しました。申し訳ありませんが、私はそれが必要ではないと思いました。私はマルチプロセッシングを試していないが、なぜ動作しないのだろうか? – krypt
問題ありません! 'gevent.monkey.patch_all()'を 'gevent.monkey.patch_all(httplib = True)'に変更してみてください。それが役に立ったら、私はそれを説明します。 – Will