aiohttpを使用してクライアント側で1秒あたりの最大リクエスト数を設定(制限)するにはどうすればよいですか?
質問する
22287 次
4 に答える
32
ここで1つの可能な解決策を見つけました: http://compiletoi.net/fast-scraping-in-python-with-asyncio.html
同時に 3 つのリクエストを行うのはクールですが、5000 を行うのはあまり良くありません。同時に多くのリクエストを行おうとすると、接続が切断されたり、ウェブサイトへのアクセスが禁止されたりする可能性があります.
これを回避するには、セマフォを使用できます。これは、ある時点で何かを実行するコルーチンの数を制限するために使用できる同期ツールです。ループを作成する前にセマフォを作成し、許可する同時リクエストの数を引数として渡します。
sem = asyncio.Semaphore(5)
次に、次のように置き換えます。
page = yield from get(url, compress=True)
同じことですが、セマフォによって保護されています。
with (yield from sem):
page = yield from get(url, compress=True)
これにより、最大 5 つのリクエストを同時に実行できるようになります。
于 2016-02-04T10:22:00.840 に答える