我遇到了从同一个衍生线程中的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时,孩子们的过程是(已经不存在)他们不是在做什么?
重要提示:当我从主线程执行该功能时,一切都很顺利。怎么处理呢?
答案 0 :(得分:2)
找到答案: 不得不退出fork进程:
os._exit(0)
不是
sys.exit()