39

aiohttpを使用してクライアント側で1秒あたりの最大リクエスト数を設定(制限)するにはどうすればよいですか?

4

4 に答える 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 に答える