Мне нужно реализовать что-то вроде этого:
while True:
conn,addr = socket.accept()
restore()
p.kill()
#...
p = subprocess.Popen(...)
Но мне нужно, чтобы функция restore()
вызывалась не только после каждого нового соединения, но и как только p умирает.
Я могу «заблокировать» свою программу, ожидающую смерти p, выполнив p.wait()
, однако в то же время я хочу заблокировать свою программу, ожидающую нового соединения.
Другими словами, мне нужно заблокировать мою программу до тех пор, пока не будет выполнено одно из этих двух условий: «p умирает» ИЛИ «новое соединение».
Я знаю, что могу использовать select
для ожидания двух файловых дескрипторов, но я не знаю, как поступить в этом случае.
Спасибо
signal.set_wakeup_fd()
для интеграцииp.wait()
в циклselect()
. Вероятно, вы могли бы использоватьasyncio
/twisted
/gevent
вместо того, чтобы самостоятельно переопределять функциональность. - person jfs   schedule 13.09.2015