0

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*/

この場合、プロセスは終了せず、スレッドが実行されるまで実行を続けます。説明はありますか?

4

1 に答える 1

0

話すコードがないので、何が起こっているのかを知るのは難しいですが、スレッドをデーモンスレッドにしてから、p2. トレッドが終了すると、p2 は適切にシャットダウンし、スレッドを強制終了します。このようなもの:

t1 = threading.Thread(target=somefunc, args=((2,)))
t1.setDaemon(True)
t1.start()
t1.join()

がんばれ、マイク

于 2012-11-16T16:09:44.240 に答える