1
在Python多線程程序中處理SIGTERM時,我最近發現了一個怪癖。類似的東西適用於os模塊中的其他功能嗎?更特別的是,我是否需要一直等待(例如os.wait)來自主線程的進程?是否可以等待來自與創建過程不同的線程的子進程?
一些代碼來說明我的觀點:
class MyService:
def stop_child_process(self, p):
assert is instance(p, subprocess.Popen)
stopper = threading.Thread(partial(self._wait_for_child, p))
stopper.start()
def _wait_for_child(self, p):
...
p.wait()
...
將這項工作,還是會以某種方式設法吹脹的生產?
這是有點不清楚你在這裏試圖做什麼。爲什麼你需要等待子進程?你希望通過在另一個線程中等待它來完成什麼?另一個線程應該能夠等待進程完成,但是這不會阻止程序關閉子進程並且線程仍然處於活動狀態,除非在線程上設置了守護進程= False。 – zstewart
謝謝@zstewart。是的,我明白你對退出流程的看法。我的問題是,如果這不是主線程具有其他線程所沒有的有關OS服務的特殊權限的情況之一。 – dsign
@zstewart'wait()'對於防止殭屍進程是必要的,並且在另一個線程中等待允許等待程序在等待時繼續進行業務。 – BlackJack