Pythonスクリプトを何度も並列に実行する必要がありますが、このようにバックグラウンドで実行しました。
ipython program.py & ipython program.py & ...
私はこの方法が実行ごとに1つのコアを使用するのか、スレッドを使用してprogram.pyを実行するのか疑問に思います。ところで、私はGNU Parallelの使い方を知りたかったのですが、私が見つけた例は、「find」の「cat」のようなコマンドです。 GNU Parallelを使用して毎回別のコアで同時にprogram.pyを実行する方法は?ご協力ありがとうございます。
答え1
GNU Parallelを使用して毎回別のコアで同時にprogram.pyを実行する方法は?
あなたは(ほぼ)プログラムをコアに結び付けたくありません。一般的に、どのコアがタスクを実行しているのか気にしません。通常、システムの各CPUスレッドに対して1つのジョブのみを実行しようとします。
そしてそれGNU Parallelを使用すると簡単です。
seq 1000 | parallel ipython program.py
これは実行されますが、ipython program.py 1
CPUipython program.py 1000
スレッドごとに1つのジョブのみが並列に実行されます。したがって、ハイパースレッディング(つまり、16個のCPUスレッド)を使用する8コアシステムでは、16個のジョブを並列に開始します。
この内容は第2章で説明します。https://doi.org/10.5281/zenodo.114601415分ほど時間をかけてお読みください。あなたのコマンドラインはあなたを愛するでしょう。
答え2
このメソッドが実行ごとに1つのコアを使用しているかどうかを知りたいです。
いいえ、必ずしもそうではありません。
または、スレッドを使用してprogram.pyを実行してください。
いいえ、これは別です。プロセス、いいえ糸。スレッドは同じコアまたは異なるコアで予約できます。
だからいくつかの用語を混同しているようです。
プロセスを開始するとき、オペレーティングシステムは何をしますか?スケジュールつまり、使用可能なCPUコアがあるときにアイドルCPUコアで実行されることを意味します。これは非常に賢いので、異なるPythonプロセスが異なるコアで実行される可能性がありますが、必ずしもそうではありません(コアが1つしかない場合でもうまく機能します!)。
GNU Parallelを使用して毎回別のコアで同時にprogram.pyを実行する方法は?
まったくそうではありません。これは、マルチプロセッサスケジューリングが機能する方法ではなく(コア固定などのトリックを経ず)、おそらく利点はありません。プログラムが呼び出す方法でCPUコアをまだ完全に活用していない場合は、GNUの同様のNothingはそれを置き換えます。すべてのコアが自動的に使用されない場合は、プロセスが競合していることを意味します。その他CPU時間よりも多くのリソース。
たとえば、ipython(実際にインタラクティブに実行しない限り、不要な多くのPythonモジュールをロードして実行した後は実行できません)を使用しているように見えるため、比較的ストレージ帯域幅が集中している可能性が高くなります。並列に)代わりに通常のPythonを使用します。
一般的に、GNUはややparallel
薄暗いと思います。つまり、使用するのは不必要に困難です。私はこれが3つのプロセス(、、および)を並列に開始するecho argument1 argument2 argument3 | xargs -P0 -n1 python script.py
より簡単な方法であることがわかりました。python script.py argument1
python script.py argument2
python script.py argument3