Pythonでモジュールを使用してプロジェクトに取り組んでいるときに、multiprocessing
奇妙な動作を観察しました。
私のメインプログラムp1がモジュールを使用してプロセスp2を作成したと仮定しましょう。multiprocessing
プロセスp2は、それ自体でp2_t1というスレッドを作成しました。このスレッドを作成した後、 p2にはコードブロックがないため、終了し(exitを呼び出していないため、mainから戻るだけです)、p2_t1がぶら下がっています。これは次の方法で確認できますstrace
子プロセスを作成するp1のサンプルコード
p = Process(target=RunService,args=(/*some args*/),name="p2")
p2のサンプルコード:
def RunService():
try:
/*do something here*/
except Exception,e:
/*create a new thread*/
/*nothing here so basically this process exits leaving the thread dangling*/
ただし、スレッド(呼び出しはp1_t1)がp1内に作成されている場合、これは発生しません。p1は、作成されたスレッドp1_t1が実行されるまで終了しません。
この場合のp1のサンプルコード
try:
/*do something here*/
except Exception,e:
/*create a new thread*/
/*nothing here so basically process should end*/
この場合、プロセスは終了せず、スレッドが実行されるまで実行を続けます。説明はありますか?