在递归函数中使用terminate()终止Python进程

时间:2013-03-02 19:44:33

标签: python recursion multiprocessing

我有一个递归函数:

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

似乎给出了错误。

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

在这方面的任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分: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