爬虫類が引っかかって誤報がない

1021 ワード

requestsライブラリを使って、一晩中登って、プログラムはあるページhangに住んでいて、何の間違った情報もなくて、退出しないで、前進しないで、ログとプロセスは問題を調べることができません.
操作のレビュー:
  • nohupを表示します.out、異常データなし;
  • プログラムlogを表示し、183ページにデータがあり、184ページのデータは現れなかった.
  • ps aux|grepはプロセスを表示し、大量のcpuとメモリを占有せず、デッドサイクルを排除する.
  • コードを表示し、マルチスレッドマルチプロセスを使用せず、デッドロックを排除します.
  • 問題プロセスが開いたファイルを表示し、lsof-p xxは、最後に開いたファイルが2つのtcp接続を確立し、ずっと切断されていないことを発見し、ioブロックの可能性を考慮した.
  • 再びコードを表示し、io接続の再試行を設定し、接続タイムアウトを設定していないが、requestsライブラリにデフォルトのタイムアウトがあると思っていたので、解けなかった.
  • 再度lsofを見て、lsof-i:portについて何の接続ポートが確立されているかを見て、https
  • であることを発見しました.
  • ネット上でrequestsライブラリのタイムアウト再試行問題を検索し、次の一言を得た:
                ,     ,           
    
  • おおらかに!デフォルトのタイムアウトは、接続タイムアウト、デフォルト2 sであり、セッションでadapterで設定されたretry再試行も、Retryオブジェクトを使用してタイムアウトメカニズムを詳細に指定しない限り、接続タイムアウトに対して簡単なデフォルトです.
    解決方法:
  • request.getメソッドはtimeout=(5,10)を設定し、簡単にtimeout=5を設定するか、設定した接続タイムアウトを設定します.デフォルトのタイムアウトは、ダウンロードストリーム接続を防止するために行われます.
  • その後、セッション内のadapter読み取りタイムアウト再試行回数をRetryで指定することができる.