我想知道我是否使用
停止了扭曲过程kill `cat twistd.pid`
如果确实有一些sql执行提交将会发生什么? 它会等待执行完成吗?或者只是未知,它可以完成,还是放弃?
我知道如果我将执行放在 stopFactory 方法中,工厂会执行诸如等待执行完成之类的事情。但是,如果我不这样做,我的意思是执行stopFactory方法,它会在工厂停止之前等待执行完毕吗?
感谢。
答案 0 :(得分:6)
kill发送SIGTERM
。 Twisted安装一个调用SIGTERM
的{{1}}处理程序。当您使用reactor.stop()
命令时,当您调用reactor.stop()
时会发生任何事情。
更具体地说,任何关闭触发器都将运行。这意味着附加到kill
的任何服务都将调用其Application
方法(如果返回stopService
,则允许在关闭之前完成)。它还意味着反应堆线程池中的工作线程将以有序的方式关闭 - 即,允许完成他们正在进行的任何工作。
如果你正在使用adbapi,那么Deferred
会使用自己的ConnectionPool
并注册一个关闭触发器,以便以类似的顺序关闭该池。
因此,当您使用ThreadPool
来停止基于Twisted的进程时,任何SQL中间执行都将被允许在关闭之前完成。