2011-09-17 28 views
0

我有一個使用多個守護程序線程的Python程序。我想從外面停止該程序,最好是從另一個Python腳本中停止。如何從外部停止多線程Python腳本

我已經從shell中嘗試了kill <pid>,只是爲了測試,但它不適用於多線程腳本。

一種方法是讓程序每隔n秒檢查一次文件作爲終止標誌。我確信有更好的方法可以做到這一點。

請注意,我想幹淨地停止程序,所以我認爲從外部以某種異常形式發送的消息將是理想的。

編輯
這裏是我做到了,此刻一個例子:

try: 
    open('myprog.lck', 'w').close() 
    while True: 
     time.sleep(1) 
     try: 
      open('myprog.lck').close() 
     except IOError: 
      raise KeyboardInterrupt 
except KeyboardInterrupt: 
    print 'MyProgram terminated.' 

刪除文件myprog.lck將導致腳本停止。上面的例子是不好的方法來做到這一點?

+0

你有沒有試過讓'kill'發送一個信號,而不是默認的'TERM'?如果一個進程真的行事不端,你總是可以使用'KILL'('kill -KILL ')。 – icktoofay

+1

你的意思是多進程或多線程? – agf

+0

@icktoofay該程序運行得非常好,我只是想能夠從另一個Python腳本停止或重新啓動程序。我會編輯這個問題以避免混淆。 – Rainbow

回答

2

使用毒丸技術。在收到一個藥丸(一條特殊的信息)後,你的程序必須處理它並死亡。你做這件事的方式是可以的,但對於更優雅的東西,你應該在你的「殺戮腳本」和你的主程序。首先,請查看標準庫中的Interprocess Communication and Networking

0

你應該能夠從kill -9 <pid>的殼中殺死它。