Python 3.6を使用して複数のファイルをメモリに並行してロードする最良の方法は何ですか?

Ehsan Sadr

6つの大きなファイルがあり、それぞれにpickle関数を使用してハードディスクに保存した辞書オブジェクトが含まれています。それらすべてを順番にロードするのに約600秒かかります。プロセスをスピードアップするために、それらすべてを同時にロードし始めたいと思います。それらがすべて同じサイズであるとすると、代わりに100秒でロードしたいと思います。マルチプロセッシングとapply_asyncを使用して、それぞれを個別にロードしましたが、シーケンシャルのように実行されます。これは私が使用したコードであり、機能しません。コードはこれらのファイルのうち3つ用ですが、6つでも同じです。IOが制限されていないことを確認するために、3番目のファイルを別のハードディスクに置きました。

def loadMaps():    
    start = timeit.default_timer()
    procs = []
    pool = Pool(3)
    pool.apply_async(load1(),)
    pool.apply_async(load2(),)
    pool.apply_async(load3(),)
    pool.close()
    pool.join()
    stop = timeit.default_timer()
    print('loadFiles takes in %.1f seconds' % (stop - start))
user4815162342

コードが主にIOによって制限されており、ファイルが複数のディスク上にある場合スレッドを使用してコードを高速化できる可能性あります。

import concurrent.futures
import pickle

def read_one(fname):
    with open(fname, 'rb') as f:
        return pickle.load(f)

def read_parallel(file_names):
    with concurrent.futures.ThreadPoolExecutor() as executor:
        futures = [executor.submit(read_one, f) for f in file_names]
        return [fut.result() for fut in futures]

PythonはIOを実行するときに一貫して解放するためGILはIO操作を強制的にシリアル化して実行しません。

代替案に関するいくつかの意見:

  • multiprocessing 複数のプロセスでの作業を保証する一方で(したがってGILを使用せずに)、サブプロセスとメインプロセスの間でコンテンツを転送する必要があり、追加の時間がかかるため、役立つ可能性はほとんどありません。

  • asyncio非同期ファイルシステムアクセスをネイティブにサポートしていないため(また、一般的なOSもサポートしていないため)、まったく役に立ちません。スレッドエミュレートできますが、効果は上記のコードと同じですが、セレモニーがはるかに多くなります。

  • どちらのオプションも、6つのファイルの読み込みを6倍高速化することはできません。少なくとも一部の時間は、GILによってシリアル化される辞書の作成に費やされていることを考慮してください起動を本当にスピードアップしたい場合は、辞書全体を事前に作成してファイル内データベース切り替えるのではなく、辞書を使用してコンテンツへのアクセスをキャッシュすることをお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python 3 を使用して (Postgres によって作成された) ファイルをインメモリ SQLite データベースに一括ロードする最速の方法は何ですか?

分類Dev

python3を使用してリスト内の複数のintの累乗を計算する最良の方法は何ですか?

分類Dev

Sorted()関数を使用してPython 3でCSVファイルのデータを並べ替える方法は?

分類Dev

Django / pythonでamazons3のファイルを変換する最良の方法は何ですか?

分類Dev

Python3メモリエラーの原因は何ですか?そしてそれを解決する方法は?

分類Dev

Python3で非同期的にファイルを削除する最良の方法は?

分類Dev

同じグローバルPythonアプリケーションで複数のモジュールからSQLite3を使用する場合の最良のアプローチは何ですか?

分類Dev

Pythonでboto3を使用してファイルパスを指定してs3からファイルをダウンロードする方法

分類Dev

複数のリストをdictで返すのではなく引数として使用する場合、より良い方法はありますか(python3)?

分類Dev

Python 3で、リストに保存されている画像をファイルオブジェクトとして開く最良の方法は?

分類Dev

S3を反復処理し、各ファイルを個別にPythonにダウンロードするための最良の方法

分類Dev

Pythonを使用してAWS-s3バケットの異なるリージョンにファイルをアップロードする方法

分類Dev

Pythonを使用して、2つの.CSVファイルから上位3つの場所のみを並べ替えて保存し、それらを1つの.CSVファイルの2つの列に保存するにはどうすればよいですか?

分類Dev

Python3xでテキストファイルから複数のリストに行を追加する方法

分類Dev

python3で複数行の文字列をファイルストリームとして読み取る方法は?

分類Dev

Python3関数内でテキストファイルの行を実行してグローバル変数をインスタンス化するにはどうすればよいですか?

分類Dev

Pythonを使用してcsvファイルの大きなデータセットに列を追加するための最良の方法は何ですか?

分類Dev

テーブルからすべての列をフェッチし、Pythonを使用してcsvファイルとしてs3に保存する方法

分類Dev

Python3-空腹のオオカミに配給を割り当てる最良の方法は何ですか?

分類Dev

Pythonを使用してS3バケットからダウンロードした後にロードするpickleファイルの問題

分類Dev

Python 3を使用して、Jupyter Notebookで相対インポートを使用して、別のディレクトリに格納されているモジュールからローカル関数をインポートする

分類Dev

ファイルの内容を読み取るargparseを使用してPython3ファイルを作成するにはどうすればよいですか?

分類Dev

PythonでBotoを使用してS3バケットへのファイルのアップロードが完了したかどうかを確認するにはどうすればよいですか?

分類Dev

PythonでARNiamを使用してAmazons3バケットにファイルをアップロードする

分類Dev

Python3を使用してファイルに追加する方法

分類Dev

Python3は複数の関数を並行して実行します

分類Dev

ファイルからテキストバッファを取得し、PythonとGtk +3を使用してTextViewにロードする方法

分類Dev

ファイルからテキストバッファを取得し、PythonとGtk +3を使用してTextViewにロードする方法

分類Dev

標準ライブラリのみを使用してPython2および3互換コードを作成するための最良の方法

Related 関連記事

  1. 1

    Python 3 を使用して (Postgres によって作成された) ファイルをインメモリ SQLite データベースに一括ロードする最速の方法は何ですか?

  2. 2

    python3を使用してリスト内の複数のintの累乗を計算する最良の方法は何ですか?

  3. 3

    Sorted()関数を使用してPython 3でCSVファイルのデータを並べ替える方法は?

  4. 4

    Django / pythonでamazons3のファイルを変換する最良の方法は何ですか?

  5. 5

    Python3メモリエラーの原因は何ですか?そしてそれを解決する方法は?

  6. 6

    Python3で非同期的にファイルを削除する最良の方法は?

  7. 7

    同じグローバルPythonアプリケーションで複数のモジュールからSQLite3を使用する場合の最良のアプローチは何ですか?

  8. 8

    Pythonでboto3を使用してファイルパスを指定してs3からファイルをダウンロードする方法

  9. 9

    複数のリストをdictで返すのではなく引数として使用する場合、より良い方法はありますか(python3)?

  10. 10

    Python 3で、リストに保存されている画像をファイルオブジェクトとして開く最良の方法は?

  11. 11

    S3を反復処理し、各ファイルを個別にPythonにダウンロードするための最良の方法

  12. 12

    Pythonを使用してAWS-s3バケットの異なるリージョンにファイルをアップロードする方法

  13. 13

    Pythonを使用して、2つの.CSVファイルから上位3つの場所のみを並べ替えて保存し、それらを1つの.CSVファイルの2つの列に保存するにはどうすればよいですか?

  14. 14

    Python3xでテキストファイルから複数のリストに行を追加する方法

  15. 15

    python3で複数行の文字列をファイルストリームとして読み取る方法は?

  16. 16

    Python3関数内でテキストファイルの行を実行してグローバル変数をインスタンス化するにはどうすればよいですか?

  17. 17

    Pythonを使用してcsvファイルの大きなデータセットに列を追加するための最良の方法は何ですか?

  18. 18

    テーブルからすべての列をフェッチし、Pythonを使用してcsvファイルとしてs3に保存する方法

  19. 19

    Python3-空腹のオオカミに配給を割り当てる最良の方法は何ですか?

  20. 20

    Pythonを使用してS3バケットからダウンロードした後にロードするpickleファイルの問題

  21. 21

    Python 3を使用して、Jupyter Notebookで相対インポートを使用して、別のディレクトリに格納されているモジュールからローカル関数をインポートする

  22. 22

    ファイルの内容を読み取るargparseを使用してPython3ファイルを作成するにはどうすればよいですか?

  23. 23

    PythonでBotoを使用してS3バケットへのファイルのアップロードが完了したかどうかを確認するにはどうすればよいですか?

  24. 24

    PythonでARNiamを使用してAmazons3バケットにファイルをアップロードする

  25. 25

    Python3を使用してファイルに追加する方法

  26. 26

    Python3は複数の関数を並行して実行します

  27. 27

    ファイルからテキストバッファを取得し、PythonとGtk +3を使用してTextViewにロードする方法

  28. 28

    ファイルからテキストバッファを取得し、PythonとGtk +3を使用してTextViewにロードする方法

  29. 29

    標準ライブラリのみを使用してPython2および3互換コードを作成するための最良の方法

ホットタグ

アーカイブ