一度に多くのスレッドを使用して複数のファイルを非常に高速にダウンロードできますが、問題は、数分後に徐々に遅くなり、ほぼ完全に停止する傾向があることです。理由はわかりません. 私が見ることができるコードに問題はなく、RAM/CPU は問題ありません。私が考えることができる唯一のことは、urllib2 が大量の接続を正しく処理していないということです。それが役立つ場合は、プロキシを使用していますが、プロキシがなくてもこの問題が発生しました。この問題に対する提案や洞察はありますか? ありがとう!
2 に答える
Python を使用せずに同じ数の同時ダウンロードを実行すると、引き続き高速にダウンロードされることを確認できますか? おそらく、問題はコードにあるのではなく、接続が抑制されているか、ファイルを提供するサイトに問題がある可能性があります。
それが問題でない場合は、pyprocessingライブラリを試して、マルチスレッド バージョンではなくマルチ プロセス バージョンを実装してみてください。Python 2.6 を使用している場合、pyprocessing はmultiprocessingとしてディストリビューションに含まれています。スレッド化されたコードをマルチプロセス コードに変換するのは非常に簡単なので、問題がスレッド化にあることを確認するだけであれば、試してみる価値があります。
別の回答が示唆したように、問題は接続またはファイルを提供しているサイトにある可能性があります。ローカルのテスト サーバーに対してコードを実行できる場合は、これを排除できます。
テスト サーバーを使用して問題が解決した場合は、接続またはリモート サーバーに問題があります。
テスト サーバーを使用しても問題が解決しない場合は、コードに何らかの問題がある可能性がありますが、少なくともサーバー ログがあれば、何が起こっているのかをより詳しく知ることができます。
探索できる別の手段として、このスレッドでは、urllib2 の代わりに httplib2 を使用することを提案しています。