urllib2.urlopen()を使用して、大規模なファイルを開くことがあります。私はSIGTERMを捕まえるためのシグナルハンドラを持っていますが、呼び出しを完了するのを待つことなく、大きなファイルをダウンロードしてすぐにプログラムを閉じるためにurlopen()を実際に中断することは可能ですか?Python:SIGTERMでurllib2.urlopen()を中断する
0
A
答えて
0
urlopen
はファイルのようなオブジェクトを返します。このオブジェクトに対して.read()
要求を行うと、データはネットワーク経由でのみ送信されます。
.read()
メソッドを使用すると、ループを使用してチャンク内のデータを読み取ることができます(おそらく16Kです)。一度にファイル全体を取得するのではなく、一度に64Kを使用します。あなたのシグナルハンドラでは、ファイルのようなオブジェクトを閉じることができ、現在のチャンクが終了した後にファイルのダウンロードが停止されます。使用するチャンクが小さければ小さいほど、ダウンロードを停止するレイテンシが少なくなります。
ファイルハンドラでアクセスできるように、グローバル変数を使用してファイルライクなオブジェクトへの参照を保持します。この場合、最も単純な解決策のようです。
ファイルのようなオブジェクトを閉じた後にそれを読み込もうとすると、正常に処理できる例外が発生します。
関連する問題
- 1. urllib2.urlopen with pandas data
- 2. GAEを使用して特定のURLでurllib2.urlopen()を返す
- 3. urlopenを使わずにurllib2 POSTリクエストを作成するには?
- 4. urllib2.urlopenは画像を取得できませんが、ブラウザは
- 5. urllib2.urlopen()は別の結果を返します
- 6. urllib2.urlopenは別のスレッドでは動作しません
- 7. urllib2.urlopen()がプロキシ経由で接続する原因は何ですか?
- 8. urllib2 urlopen非常にランダムに動作します
- 9. イメージをダウンロードした後、urllib.retrieveとurllib2.urlopenは返さない
- 10. urllib2.urlopenでチャンクを同期して読み込んで入れよう
- 11. Pythonのurllib2.urlopen()は、Java Restletサーバーへのローカル接続でハングします
- 12. urllib2.urlopen info()またはgeturl()メソッドを持たないオブジェクトを返す
- 13. Java、スレッドを中断(中断)
- 14. urllib2.Request/urlopenで処理する必要のあるエラー/例外は何ですか?
- 15. ES6 MapでforEachを中断/中断する方法は?
- 16. Webサービス通信中のURLOpenエラー
- 17. Silverlight:バインディングエラーで中断する
- 18. Lambda Python Pool.mapとurllib2.urlopen:失敗したプロセスのみを再試行し、エラーのみをログに記録する
- 19. urllib2.urlopenはどのレジストリ/環境(またはその他の)設定でプロキシ設定を決定しますか?
- 20. urllib2.urlopen()によって返されたファイルのようなオブジェクトでpollを使用していますか?
- 21. 並行性 - 未来を中断せずに中断する
- 22. urllib2.urlopen()によって作成されるオブジェクトは、定数接続を表しますか?
- 23. urllib2.urlopenの使用時にリダイレクトを含む元の応答ヘッダーにアクセスするには
- 24. アニメーションを中断する
- 25. ブーストスレッドを中断する
- 26. 包含を中断する
- 27. ループを中断する
- 28. AHKスクリプトを中断する
- 29. 子プロセスを中断する
- 30. Travisビルドを中断する