私は大きなスクレイピングジョブを実行しています。ネットワーク待ち時間のためにスクリプトの時間のほとんどがブロックされています。私は、同時に複数の要求を行うことができますので、スクリプトをマルチスレッドしようとしているが、私のスレッドの約10%は、次のエラーPythonでのマルチスレッドWebリクエスト - '名前またはサービスが不明'
URLError: <urlopen error [Errno -2] Name or service not known>
正常に完了し、他の90%は死にます。同じドメインから複数のページをリクエストしているため、DNSの問題があるようです。一度に25リクエスト(25スレッド)を作成します。私は一度に5つの要求に自分自身を制限すればすべてうまく動作しますが、約10回の要求に達すると、時々このエラーが見え始めます。
Repeated host lookups failing in urllib2 私はこの中にある提案と同じ問題を記述していますが、役に立たないと読んでいます。
マルチスレッドの代わりにマルチプロセッシングモジュールを使用してみましたが、同じ動作が発生します - 同じエラーでプロセスの約10%が死ぬ - これはurllib2の問題ではないと私につながりますしかし何か。
誰かが何が起こっているのか説明して修正する方法を提案できますか?
UPDATE
私は手動で私のスクリプトのすべてにサイトのIPアドレスをコーディングする場合は完璧に動作しますので、このエラーは、DNSルックアップ中にいつか起こります。
サーバーにアクセスできますか?あなたは何らかのサービス妨害拒否の問題にぶつかっているかもしれませんし、サーバーがそれほど重いものでないなら、あなたは実際にそれを過負荷にしているかもしれません... – jswolf19
それは何百ものものを扱うことができる主要なウェブサイトです何千もの同時リクエスト、私の25は小さな凹みさえしません。ドメイン名をIPアドレスに置き換えると、スクリプトが完璧に実行されるので、ウェブサイトが明示的に私をシャットアウトしないので、DNS解決の問題だと私は確信しています。この時点で、DNSルックアップが失敗している理由を理解したいだけです。 –
それから、DNSサーバーで問題が発生する可能性があります。これは、特定の時間内にクライアントからの非常に多くの要求が許可されている場合に限られます。 – jswolf19