2017-12-07 9 views
0

私はPythonでマルチプロセッシングを初めて使うので、疑いがあります。私の最初のアイデアはスレッドを使用することでしたが、次にGILについて読んで、マルチプロセッシングに移行しました。手作業でプロセスを停止する必要があります

私はこのようなプロセスを起動したときに私の質問は、次のとおりです。?実行()メソッドが終了したときに

t1 = Process(target=run, args=lot) 
t1.start() 

は私がメインプロセスから何とかそれを停止する必要がある、またはそれらのシャットダウンありませんか

私は(のようなものが加わることを知っている)が存在するが、私は仕事のスケジュールを設定していますすべてのN分を並列にプロセスのカップルを開始し、停止するまで、この手順は行くので、私は本当にしないでくださいプロセスが完了するのを待つ必要があります。

答えて

0

はいt1.start()が発生すると、target(つまりrun)で指定されたメソッドを実行します。完了すると自動的に終了します。

あなたは、コマンド以下のLinuxの使用で実行中のプロセスの例をチェックして

"ps -aux |grep python" or "ps -aux |grep "program_name.py" 

あなたの目標は、カウントは、よりになります実行されて、これを確認することができます。

プロセスが終了して終了するまで待機するには、join()メソッドを使用します。しかし、あなたの場合はその必要はありません

以上の例ではここにある:https://pymotw.com/2/multiprocessing/basics.html

0

まあ、GILは、あなたは多くの計算を行っていない大きな問題ではありませんが、プログラムの時に実行をものネットワーキングやファイルを読み込むようなもの入出力操作が行われるまで、制御フローがkrnelに与えられる。その後、別のスレッドをPythonで実行できます。

多くのCPUを消費している場合は、実際にマルチプロセッシングに備える必要があります。

join()メソッドはスレッドの同期に使用されるため、メインスレッドが別のスレッドで処理されたデータに依存する場合は、それを使用することが重要です。それ以外の場合はそうではありません。オペレーティングシステムは、子プロセスを安全に終了するような処理を行います。

EDIT:check this discussion詳細については、

関連する問題