Pythonはスレッドごとに複数のプロセスをマルチプロセッシングします

dter

私は現在、プールを備えたPythonのマルチプロセッシングモジュールを使用して、関数を何百万回も同時に実行しています。マルチプロセッシングはうまく機能しますが、この関数は非常に軽量であるため、各コアの30%しか使用されず、Locking()中にのみスレッドが最大になります。私のスクリプトのプロファイルを見ると、確かにロックは最も費用がかかります。

各関数の実行が非常に短いことを考えると、関数にマッピングするたびにロックすることと関数を実行することの間のトレードオフは価値がありません(実際、シリアルで実行することでパフォーマンスが向上しています。15分並列化対4.5分シリアル)。

この関数は独立したファイルに書き込むため、呼び出しは完全に独立しています。同じ並列化されたPythonスクリプトを(異なる入力で)複数回実行/呼び出すことを「模倣」して、CPUをさらに活用することは可能ですか?

現在のコード:

pool = Pool(cpu_count(), initializer=tqdm.tqdm.set_lock, initargs=(Lock(),))

for _ in tqdm.tqdm(pool.imap_unordered(parallel_process, pubfiles, chunksize=70), total=nfiles, desc='Parsing files'):
  pass

編集:

tqdmのロックとは関係がないことを確認するには、コードを次のように変更すると同じ問題が発生します。

    pool = Pool(cpu_count())
    for i in pool.imap_unordered(parallel_process, files, chunksize=70):
        print(i)

ここに画像の説明を入力してください

私はしばらくの間コードのプロファイルを作成しましたが、最も高価なプロセスは一般にロック(?)/マルチプロセッシングに関連しているようです。実際の機能は、処理時間の最下部に非常に近いものです。ここに画像の説明を入力してください

dter

この問題はマルチプロセッシングとは何の関係もありませんでした。各呼び出しがファイルの読み取りとディスクへの書き込みを行っていたため、関数はIOバウンドであり、これは並列実行時のボトルネックでした。チャンク化して書き込まれるファイルの数を減らすと、このボトルネックが減り、上記のマルチプロセッシングコード(並列処理)は完全に正常に機能しました。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

スレッドごとに異なる定数を使用したPythonマルチプロセッシング

分類Dev

Intellij IDEAは、デバッグセッションごとに複数のプロセスを作成しますか?

分類Dev

Intellij IDEAは、デバッグセッションごとに複数のプロセスを作成しますか?

分類Dev

Tkinterの複数のタブ:(マルチスレッドまたはマルチプロセッシング)

分類Dev

マルチプロセッシングは、プロセスごとに現在のフォルダを変更します

分類Dev

Pythonマルチプロセッシングでは、子プロセスはどのようにして別の子プロセスを終了できますか?

分類Dev

Pythonでのマルチスレッド/マルチプロセッシング中に重複した結果を避ける方法は?

分類Dev

ループを高速化するPythonマルチスレッドとマルチプロセッシング

分類Dev

複数のtqdmプログレスバーを使用したマルチプロセッシング

分類Dev

ファイルをダウンロードするためのPythonでのマルチプロセッシングまたはマルチスレッド

分類Dev

マルチプロセッシング:ファイルハンドルをプロセスに渡します

分類Dev

LinuxでのPythonスレッドとマルチプロセッシング

分類Dev

Python-IOのマルチプロセッシングとスレッド

分類Dev

zmq.error.ZMQError:製紙工場を使用して複数のノートブックでマルチプロセッシングを実行しているときに、アドレスはすでに使用されています

分類Dev

マルチスレッドシングルコアCPUで複数のプロセスを並行して実行できますか?

分類Dev

このスクリプトでマルチスレッド(またはマルチプロセッシング?)を実装しますか?

分類Dev

Pythonマルチプロセッシング-プール内のプロセスの数はエラー時に減少しますか?

分類Dev

Pythonマルチプロセッシングワーカープロセスが複数のコアを使用しないのはなぜですか?

分類Dev

Pythonマルチプロセッシングの子プロセスが親イベントまたはメソッドをトリガーします

分類Dev

Pythonでマルチプロセッシングを行う場合、グローバル変数は各プロセスで複製されますか?

分類Dev

Pythonでマルチスレッドをマルチプロセッシングに変換する

分類Dev

Pythonマルチプロセッシング。プロセスは非決定論的に動作します

分類Dev

Pythonマルチプロセッシング。プロセスは非決定論的に動作します

分類Dev

Pythonマルチプロセッシングは不明な引数でスクリプトを再起動します

分類Dev

キルプロセス後のPythonマルチプロセッシングはis_alive()ステータスをTrueにします

分類Dev

Python(マルチプロセッシング):ワーカープロセス初期化関数の引数として辞書を渡す方法は?

分類Dev

Pythonマルチプロセッシング-プロセスの終了(プロセスを2回開始することはできません)

分類Dev

Python:マルチプロセッシングスレッドを閉じると、プログラム全体が停止します

分類Dev

マルチプロセッシングはコアとスレッドにどのように関連していますか?

Related 関連記事

  1. 1

    スレッドごとに異なる定数を使用したPythonマルチプロセッシング

  2. 2

    Intellij IDEAは、デバッグセッションごとに複数のプロセスを作成しますか?

  3. 3

    Intellij IDEAは、デバッグセッションごとに複数のプロセスを作成しますか?

  4. 4

    Tkinterの複数のタブ:(マルチスレッドまたはマルチプロセッシング)

  5. 5

    マルチプロセッシングは、プロセスごとに現在のフォルダを変更します

  6. 6

    Pythonマルチプロセッシングでは、子プロセスはどのようにして別の子プロセスを終了できますか?

  7. 7

    Pythonでのマルチスレッド/マルチプロセッシング中に重複した結果を避ける方法は?

  8. 8

    ループを高速化するPythonマルチスレッドとマルチプロセッシング

  9. 9

    複数のtqdmプログレスバーを使用したマルチプロセッシング

  10. 10

    ファイルをダウンロードするためのPythonでのマルチプロセッシングまたはマルチスレッド

  11. 11

    マルチプロセッシング:ファイルハンドルをプロセスに渡します

  12. 12

    LinuxでのPythonスレッドとマルチプロセッシング

  13. 13

    Python-IOのマルチプロセッシングとスレッド

  14. 14

    zmq.error.ZMQError:製紙工場を使用して複数のノートブックでマルチプロセッシングを実行しているときに、アドレスはすでに使用されています

  15. 15

    マルチスレッドシングルコアCPUで複数のプロセスを並行して実行できますか?

  16. 16

    このスクリプトでマルチスレッド(またはマルチプロセッシング?)を実装しますか?

  17. 17

    Pythonマルチプロセッシング-プール内のプロセスの数はエラー時に減少しますか?

  18. 18

    Pythonマルチプロセッシングワーカープロセスが複数のコアを使用しないのはなぜですか?

  19. 19

    Pythonマルチプロセッシングの子プロセスが親イベントまたはメソッドをトリガーします

  20. 20

    Pythonでマルチプロセッシングを行う場合、グローバル変数は各プロセスで複製されますか?

  21. 21

    Pythonでマルチスレッドをマルチプロセッシングに変換する

  22. 22

    Pythonマルチプロセッシング。プロセスは非決定論的に動作します

  23. 23

    Pythonマルチプロセッシング。プロセスは非決定論的に動作します

  24. 24

    Pythonマルチプロセッシングは不明な引数でスクリプトを再起動します

  25. 25

    キルプロセス後のPythonマルチプロセッシングはis_alive()ステータスをTrueにします

  26. 26

    Python(マルチプロセッシング):ワーカープロセス初期化関数の引数として辞書を渡す方法は?

  27. 27

    Pythonマルチプロセッシング-プロセスの終了(プロセスを2回開始することはできません)

  28. 28

    Python:マルチプロセッシングスレッドを閉じると、プログラム全体が停止します

  29. 29

    マルチプロセッシングはコアとスレッドにどのように関連していますか?

ホットタグ

アーカイブ