在Python问题中生成的Thread内部的Fork()

时间:2018-02-25 23:10:49

标签: python multithreading python-3.x thread-safety fork

我遇到了从同一个衍生线程中的fork产生中杀死子进程的问题:

_td = threading.Thread(target=updateProxies,args=())
_td.start()

def updateProxies():
    quota = 25
    children = []
    sons = 0
    for i in range(50):
        pid = os.fork()
        if pid:
            children.append(pid)
            sons+=1
            if sons >= quota:
                os.wait()
                sons-=1
        else:
             {CHILD CODE EXECUTION} #database calls, and network requests
             sys.exit()
    for x in children:
        os.waitpid(x,0)

当我运行上面的代码时,来自子代的父级停在" os.waitpid(x,0)"线,从不从那里恢复。是的,我跟踪了所有的孩子,直到他们分别死在他们的sys.exit(),但waitpid从来没有得知他们的死亡,我的父进程永远不会恢复! 在做ps -ef时,孩子们的过程是(已经不存在)他们不是在做什么?

重要提示:当我从主线程执行该功能时,一切都很顺利。怎么处理呢?

1 个答案:

答案 0 :(得分:2)

找到答案: 不得不退出fork进程:

os._exit(0)

不是

sys.exit()