2015-09-09 18 views
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() 
     ... 

將這項工作,還是會以某種方式設法吹脹的生產?

+0

這是有點不清楚你在這裏試圖做什麼。爲什麼你需要等待子進程?你希望通過在另一個線程中等待它來完成什麼?另一個線程應該能夠等待進程完成,但是這不會阻止程序關閉子進程並且線程仍然處於活動狀態,除非在線程上設置了守護進程= False。 – zstewart

+0

謝謝@zstewart。是的,我明白你對退出流程的看法。我的問題是,如果這不是主線程具有其他線程所沒有的有關OS服務的特殊權限的情況之一。 – dsign

+0

@zstewart'wait()'對於防止殭屍進程是必要的,並且在另一個線程中等待允許等待程序在等待時繼續進行業務。 – BlackJack

回答

1

從哪個線索呼叫Popen.wait()os.wait()並不重要。它不一定是過程開始的同一個線程。

相關問題