当停止扭曲时,工厂会等待sql执行完成吗?

时间:2013-01-14 03:08:44

标签: python twisted kill

我想知道我是否使用

停止了扭曲过程
kill `cat twistd.pid`

如果确实有一些sql执行提交将会发生什么? 它会等待执行完成吗?或者只是未知,它可以完成,还是放弃?

我知道如果我将执行放在 stopFactory 方法中,工厂会执行诸如等待执行完成之类的事情。但是,如果我不这样做,我的意思是执行stopFactory方法,它会在工厂停止之前等待执行完毕吗?

感谢。

1 个答案:

答案 0 :(得分:6)

默认情况下,

kill发送SIGTERM。 Twisted安装一个调用SIGTERM的{​​{1}}处理程序。当您使用reactor.stop()命令时,当您调用reactor.stop()时会发生任何事情。

更具体地说,任何关闭触发器都将运行。这意味着附加到kill的任何服务都将调用其Application方法(如果返回stopService,则允许在关闭之前完成)。它还意味着反应堆线程池中的工作线程将以有序的方式关闭 - 即,允许完成他们正在进行的任何工作。

如果你正在使用adbapi,那么Deferred会使用自己的ConnectionPool并注册一个关闭触发器,以便以类似的顺序关闭该池。

因此,当您使用ThreadPool来停止基于Twisted的进程时,任何SQL中间执行都将被允许在关闭之前完成。