-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() 

似乎给出了一个错误。

还有一个轻微的并发症。我在代码中使用值(共享内存)和锁(信号量)。我已经彻底检查了代码,并且可以确认在持有任何资源时没有线程终止。

在这方面的任何帮助将不胜感激。

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 回答