4

次のコードを見てください。

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

start関数が呼び出され、ここで呼び出されていることがわかりjoinます。実際、それらは常にmultiprocessingpython documentationのモジュールの例で呼び出されます。

startが呼び出される理由は明らかです。プロセスを開始するからです。ただし、joinドキュメントで説明されているように、プロセスを完全に終了することとは異なります。

join() メソッドが呼び出されたプロセスが終了するか、オプションのタイムアウトが発生するまで、呼び出しスレッドをブロックします。

したがって、私の理解でjoin()は、プロセスを終了するために使用されます。terminate()では、ドキュメントの例で関数が使用されていないのはなぜTerminateProcess()ですか?

joinとの違いは何terminateですか? 理想的には、joinの目的は何terminateですか? の目的は何ですか? 例によれば、どちらも同じことを実行できるように見えるためです(間違っている場合は修正してください)。

Windowsには終了のための異なる機能があるため、おそらくterminateWindowsとLinuxの両方で異なるため、これまでに発見しました。選択のさらなる理由も高く評価されます。

4

3 に答える 3

9

joinは、プロセスを積極的に終了させるのではなく、プロセスを待機するために使用されますが、プロセスを強制終了するためにterminate使用されます。

次の例を試してください(あり/なしp.terminate()):

from multiprocessing import Process
import time

def f(name):
    time.sleep(1)
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.terminate() # <---
    p.join()

ではterminate、何も出力されません。

于 2013-10-31T06:32:44.810 に答える
4

したがって、私の理解でjoin()は、プロセスを終了するために使用されます。

いいえ、近くにもありません。呼び出し元のスレッドに、他のスレッドが終了するまで待機するように指示してから、戻ります。

于 2013-10-31T06:33:24.493 に答える
0

この関数join()は、呼び出しプロセスに待機するように指示するために使用されます。

于 2013-10-31T08:50:57.133 に答える