2013-01-14 45 views
1

我不知道如果我停止使用,如果恰好有一些SQL的執行承諾停止扭曲時,工廠會等待sql執行完成嗎?

kill `cat twistd.pid` 

會發生什麼twistd來處理? 它會等待執行完成嗎?或只是未知的,它可以完成,或放棄?

我知道如果我把執行放在stopFactory方法中,工廠會做類似的事情,比如等待執行完成。但如果我不這樣做,我的意思是執行stopFactory方法,它會在工廠停止之前等待執行完成嗎?

謝謝。

回答

6

殺默認發送SIGTERM。扭曲安裝一個SIGTERM處理它調用reactor.stop()。凡是當你調用reactor.stop()當您使用kill命令會發生,會發生。

更具體地說,任何關閉觸發器將會運行。這意味着連接到Application將有稱爲其stopService方法(以及如果返回Deferred,它將被允許進入關機之前完成)的任何服務。這也意味着反應堆線程池中的工作線程將以有序的方式關閉,即允許完成正在進行的任何工作。

如果您使用的是adbapi,那麼ConnectionPool將使用自己的ThreadPool,並且還會註冊一個關閉觸發器,以相似的順序關閉該池。

所以,當你使用kill停止基於雙絞線的過程中,任何SQL中期執行將被允許完成關閉發生之前。

+0

我使用adbapi,所以我認爲它是安全的。謝謝,JP。 – holsety