私はマルチスレッドのダウンローダ(Pythonで)を作成したいと思います。開始する場所とダウンロードするバイト数をそれぞれのスレッドに伝える必要があります。そのために私はリモートファイルサイズを取得し、例えば2に分割します。次に、リモートファイルサイズが5であるとしましょう。私はその数値を2に分割すると結果として2を得ます。今私はダウンロードを開始することができますが、私はバイトを失うでしょう(2*2=4
、5ではないので)。私はバイトの半分をダウンロードできないので、浮動小数点数を使うことはできません。私はその数字をどのように分けて、[2, 3]
のリストを得ることができましたか?ファイルをパラレルに分割する
2
A
答えて
3
使用divmod
:
>>> divmod(5, 2)
(2, 1)
>>>
これは、2で割っ5は余り1、2であるので、最後のピースが、ここでは2 + 1 = 3
>>> divmod(12345, 6)
(2057, 3)
になることを、あなたに伝えますあなたは2057に5つのチャンクを持ち、2057 + 3には最後のスライスを持っています。
ここ>>> divmod(12345, 5)
(2469, 0)
、あなたが+ 0 2469で4つの2469でチャンクプラス最後のスライスを持っています:
このアルゴリズムはまた、除算が余りなしである場合、動作します。
だから、あなたのチャンクサイズのように計算することができる:あなたは、各チャンクのサイズを取得したい場合、あなたは、単に最後の要素を除算の余りを追加することができます
def chunk_sizes(filesize, num_chunks):
d, r = divmod(filesize, num_chunks)
result = [d] * num_chunks
result[-1] += r
return result
0
特別な場合最後のスレッド - 多くのバイトが残っていますが、それを割り当てることができます。
1
:
>>> file_size = 11
>>> no_of_chunks = 3
>>> chunks = [file_size/no_of_chunks] * no_of_chunks
>>> chunks[-1] += file_size % no_of_chunks
>>> chunks
[3, 3, 5]
>>> for i in range(file_size % no_of_chunks):
>>> chunks[i] += 1
>>> chunks
[4, 4, 3]
:チャンクのサイズは高々1だけずれているので、あなたはまた、すべてのチャンク間で残りを配布することを変更することができます
関連する問題
- 1. 分割dmpファイルを複数のdmpファイルに分割する
- 2. QFile:ファイルを部分に分割する
- 3. 分割ファイルの分割
- 4. ファイルを分割する
- 5. TIFFファイルを分割する
- 6. ruby on railsファイルを分割するindex.jsを分割する
- 7. marklogic mlcpカスタム変換分割ファイルを複数のファイルに分割
- 8. テンプレートをマクロと一緒にファイルに分割するブックを分割する
- 9. 大きなオブジェクトをファイルに分割する前に分割する
- 10. ファイルをJavascriptでチャンクに分割する
- 11. Namenodeファイルをブロックに分割する
- 12. gstreamer:オーディオストリームをファイルに分割する
- 13. ファイルを段階的に分割する
- 14. PDFファイルを段落に分割する
- 15. メインクラスを別のファイルに分割する
- 16. Excelタブを分割してファイルを分割する
- 17. netCDF4ファイルにパラレル保存するPythonマルチプロセッシング
- 18. 分割ファイル
- 19. NLogファイル分割
- 20. データフレームを分割してパラレルにカスタム機能を実行するにはどうすればよいですか?
- 21. ファイルを複数のファイルに分割
- 22. ffmpegでmp3ファイルをtsファイルに分割
- 23. を分割ファイルI18nに分割してください。
- 24. ファイル入力をJavaの部分に分割する方法
- 25. Pythonで複数の部分に.txtファイルを分割する
- 26. 分割ファイルin R
- 27. csvファイルの分割
- 28. ".txt"ファイルの分割
- 29. XMLファイルの分割
- 30. Hive - ファイル間でデータを分割する