2016-07-16 4 views
0

私はpython3 urllib3を使用して複数のURLをダウンロードするクローラを構築しています。以上の同じURLを提出Python3 urllib3クローラ - 単一のドメインへの最大接続数を制限できません

def __init__(self): 
    self.manager = PoolManager(num_pools=20) 

私が試した:私のメインの活動に

私はPoolManagerの1つのインスタンス使用しています私のDownloaderクラスの同じ(1)インスタンスを使用しての20個のスレッドを作成しますもう一度やり直してみると、ログには同じドメインへの接続が多数作成されています。プールの数を制限しようとしましたが(num_pools=1)、同じURLに複数の接続を作成しています。ドキュメントでは、同じドメインへの他の接続が使用されている場合、PoolManagerが新しい接続を作成することを理解しました。

単一のドメインへの接続数を制限したいと考えています。最大2つの異なる接続を使用することは、通常のブラウザが使用するので安全です。どうやってやるの?

答えて

1

PoolManager(num_pools=20)は、それぞれが1つのドメインを表す20個のConnectionPoolsのインスタンスにプールを制限します。したがって、キャッシュされたドメインプールを20個に制限すると、ドメイン単位の接続は1レベル深くなります。

ConnectionPoolあたりの制限をmaxsize=20と指定できます。クローラを絞り込むためにプールを使用しているので、block=Trueを使用すると、制限外で追加の接続が作成されなくなります。 block=False(デフォルト)では、必要に応じてより多くの接続が作成されますが、maxsizeを超えるものは再利用のために保存されません。

要するに、あなたはおそらくしたい:パラメータが用意されていた上

def __init__(self): 
    self.manager = PoolManager(maxsize=20, block=True) 

もう少しドキュメント:

関連する問題