簡體   English   中英

Python:等待“子進程終止”或“新連接”

[英]Python: Wait for “child process termination” OR “new connection”

我需要實現這樣的事情:

while True:
    conn,addr = socket.accept()
    restore()
    p.kill()

    #...
    p = subprocess.Popen(...)

但是我不僅需要在每個新連接之后都調用restore()函數,而且還必須在p終止時調用該函數。

我可以通過執行p.wait()來“阻止”等待p死亡的程序,但是同時,我也想阻止等待新連接的程序。

換句話說,我需要阻塞程序,直到這兩個條件之一成立:“ p dies”或“新連接”。

我知道可以使用select等待兩個文件描述符,但是在這種情況下我不知道該怎么做。

謝謝

這是我最終使用的解決方案:

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庫可能會有更清潔/更通用的方法來實現此目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM