Python Multiprocessingについて(PMOTWの記事から)学び、join()
メソッドが正確に何をしているのかについての説明が必要です。
2008年の古いチュートリアルp.join()
では、以下のコードの呼び出しがないと、「子プロセスはアイドル状態で終了せず、ゾンビになるため、手動で強制終了する必要がある」と述べています。
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
私はプリントアウトの追加PID
だけでなくtime.sleep
、自分自身で処理を終了するをテストし、私の知る限りを:
from multiprocessing import Process
import sys
import time
def say_hello(name='world'):
print "Hello, %s" % name
print 'Starting:', p.name, p.pid
sys.stdout.flush()
print 'Exiting :', p.name, p.pid
sys.stdout.flush()
time.sleep(20)
p = Process(target=say_hello)
p.start()
# no p.join()
20秒以内:
936 ttys000 0:00.05 /Library/Frameworks/Python.framework/Versions/2.7/Reso
938 ttys000 0:00.00 /Library/Frameworks/Python.framework/Versions/2.7/Reso
947 ttys001 0:00.13 -bash
20秒後:
947 ttys001 0:00.13 -bash
動作は同じp.join()
で、ファイルの最後に追加されます。今週のPythonモジュールは、モジュールの非常に読みやすい説明を提供しています。「プロセスがその作業を完了して終了するまで待機するには、join()メソッドを使用します。」しかし、少なくともOS Xはそれを行っていたようです。
メソッドの名前についても疑問に思っています。.join()
メソッドはここに何かを連結していますか?それはそれの終わりでプロセスを連結していますか?または、Pythonのネイティブ.join()
メソッドと名前を共有するだけですか?
CPU, Memory resources
は親プロセスから分離されておりjoin
、子プロセスが完了した後、再び戻されますか?