2011-05-13 73 views
2

我有一個關於信號的問題,以及在運行sql命令時如何處理它們。特別是,我有一個python腳本作爲一個進程運行,並在裏面創建另一個進程。之後,正在運行數據庫檢查,並在該數據庫內檢查表列NULLEGE屬性是否正在更改。我必須說,桌子是相當大的......如GB大,而且它變得更大。 當我發送一個術語信號給主進程(運行數據庫檢查的進程)時,在主進程中創建的第二個進程也應該終止。好吧......在數據庫檢查正在進行NULLEGE屬性更改時,始終會發生這種情況。當這個過程結束時,主進程終止,但是信號處理程序被忽略(不進入處理信號的函數),因此沒有SIGTERM被髮送到主進程內創建的進程。這就是我如何留下一個卡住的過程。python,信號阻塞,數據庫

我的問題:有沒有辦法阻止信號(如排隊他們),而數據庫檢查正在運行或有另一種方式發送TERM信號到第二個進程使用python?我已經成功地改變了啓動python腳本的bash腳本作爲一個進程來做一個檢查,並在主進程結束後向左進程發送SIGTERM ......但是我不想用這種方式處理它。

還是有辦法打斷數據庫檢查?

ps:用於數據庫處理sqlalchemy正在Ubuntu下的Python 2.6下使用。

回答

0

您的MySQL命令是一個C調用,它會阻止Python解釋器。

最簡潔的方法可能是在發送TERM之前使用mysql或mysql-python中的「show processlist」和「kill」命令。

在這裏看到: http://www.techrepublic.com/article/how-to-examine-and-kill-mysql-client-processes/5211762

+0

也有人想出了建立該數據庫檢查到一個子進程,並從而結束了我的問題的想法。但我會看看你的鏈接,並試圖瞭解那裏有什麼。謝謝您的回答。 – John11 2011-05-17 10:31:42