2013-01-14 49 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