0

私はmiltiprocessingを使用して巨大なファイルの多くのチャンクを読み取ってから処理していますが、プロセスを起動するとコアを共有するプロセスがあるため、何かを失っています。例: 12 コアのシステムで、10 個のプロセスを実行し、6 つは 6 コア (それぞれに 1 つ) で、他の 4 つは 2 コア (各コアに 2 つ) です... しかし、それ以外の場合は、10 に対して 10 コアを使用して正常に動作します処理する...

コード:

from multiprocessing import Process
[...]
process1=Process(target=run_thread, args=("./splited/"+file,result,))
process2=Process(target=run_thread, args=("./splited/"+file,result,))
process3=Process(target=run_thread, args=("./splited/"+file,result,))
process1.start() 
process2.start()
process3.start()
[...]
process1.join()
process2.join()
process3.join()

これは私のコードの例です。問題が発生したときに 10 で試していました。

ありがとう。

編集:

  • このマシンはマルチスレッドなしで動作するため、12 個のコアと最大 12 個の並列スレッドを備えています。
  • 1 つのコアを 2 つ以上共有している場合があります。
  • ボトルの首は、このプログラムの IO ではなく、ファイルの各行を処理します。
4

1 に答える 1

0

私は確かにこの質問の専門家ではありませんが、最新のプロセッサのほとんどは、実際には物理コアと仮想コアで構成されているようです。たとえば、私は Intel Core I7 を持っています。これは 4 つの物理コアを持っていることを意味しますが、実際にはそれぞれに 2 つの仮想コアが含まれているため、私のプロセッサは 8 つの異なるプロセスを並行して実行できます。

コアごとに 2 つのプロセスがあると時々言われますが、これはコアの仮想化によるものです。

ところで、大量のデータを小さなチャンクで処理することを目的としている場合、Python にはそのようなタスク専用の特定のモジュールがあります: Poolを使用してインポートされます。

from multiprocessing import Pool

これがあなたに役立つことを願っています、乾杯

于 2013-06-28T23:29:12.603 に答える