我需要实现这样的事情:
while True:
conn,addr = socket.accept()
restore()
p.kill()
#...
p = subprocess.Popen(...)
但是我需要不仅在每次新连接之后调用restore()
函数,而且一旦p死就会调用它。
我可以通过执行p.wait()
来“阻止”我的程序等待死亡,但同时我也希望阻止我的程序等待新连接。
换句话说,我需要阻止我的程序,直到这两个条件之一成立:“p die”或“new connection”。
我知道我可以使用select
等待两个文件描述符,但在这种情况下我不知道怎么做。
由于
答案 0 :(得分:0)
这是我最终使用的解决方案:
def wait_socket_and_process(s,process):
while True:
rr,_,_ = select.select([s],[],[],0.1)
if len(rr)>0:
conn, addr = rr[0].accept()
process.kill()
process.poll()
#handle process termination
print "* subprocess killed"
return conn, addr
elif (process.poll() != None):
#handle process termination
print "* subprocess terminated"
s = socket.#...
process = subprocess.Popen(...)
wait_socket_and_process(s,process)
#handle new connection...
正如其他人所说,使用像getenv
这样的图书馆可能会有更清晰/更通用的方法。