-1

私は再帰関数を持っています:

def generateCategory(url,level,id,lock)
    #url(string) , level (int), id (Value:shared memory), Lock (Semaphore)

    if level == 5:
        return              #The child process should terminate here right?

    #code here

    for i in range(5):
        Process(target=fn, args =('abc',level+1,id,lock)).start()

    return                  #Here, according to my understanding, the parent process should terminate leaving the child process as an orphan (since I didn't use join)

私が間違っていなければ、いくつかのプロセスは終了していません。forループの後の戻りが期待どおりに機能しないため、同じことが起こっているのではないかと思います。代わりに、すべての子プロセスが完了するまで待機します。私はterminate()コマンドを調べました。しかし、それが私のために機能するためには、私はそれ自体の中でプロセスを終了しなければなりません。

self.terminate() 

エラーが発生するようです。

もう1つのわずかな問題があります。コードで値(共有メモリ)とロック(セマフォ)を使用しています。コードを徹底的にチェックし、リソースを保持しているときにスレッドが終了しないことを確認できます。

この点での助けをいただければ幸いです。

4

1 に答える 1

0

Processesあなたはおそらくあなたのを追跡する必要があります

processes = [Process(target=fn, args=('abc',level+1,id,lock)) for i in range(5)]

そしてそれらを開始します

[p.start() for p in processes]

そして、いつでも好きなときに終了するためにそれらを手に入れることができます

[p.terminate() for p in processes]

processesこの終了を別の場所で処理する必要がある場合は、関数から戻ることができます。

于 2013-03-02T20:07:58.453 に答える