对于模糊的标题感到抱歉,但我无法找到更好的东西。
有没有办法让反应堆的当前状态扭曲? 按状态我的意思是:
基本上我正在试图弄清楚反应堆是否只是懒散地坐着。 为了Stackoverflow的完整性,问题本身比我实际需要做的更广泛。
现在,我目前的情况如下:
我正在使用其他人的脚本来侦听由此人的脚本选择的许多“动态”端口,因此我不能只使用我的脚本执行listenTCP或TCP4ServerEndpoint之类的操作并检查其状态。 这有点类似于非PASV FTP,每次使用后都会丢弃每个侦听端口。 另一个问题是我自己的小程序也在同一个进程中运行,我用它作为启动程序的参数。它基本上是他的程序的接口。 当他所有的事情都完成了,我的事情也完成了,我想关闭反应堆。 因此,我试图找出何时可以停止反应堆。 我关闭的确切条件如下:
我搜索了但只发现了“if reactor.running”或Stop twisted reactor on a condition之类的东西,需要使用标记来跟踪。 我宁愿不碰他的代码。如果它有可能导致扭曲,我宁愿这样做。 但如果已有替代方案,我宁愿不重新发明轮子。
他的脚本是否需要更改,以便通知我的脚本这些条件?
答案 0 :(得分:2)
您要调用的代码应该被重构以从某些内容返回Deferred
;可能是IService.stopService
的实现阻止了它。这样做的原因是你不会总是知道在反应堆中会坐着什么,即使事情显然是空闲的#34;例如,你知道Twisted维护一个文件描述符(" waker")来进行线程通信吗? HTTP服务器始终保持callLater
未完成以写入下一个访问日志条目?第三方库中的其他基础设施可能会在反应堆中留下任意不同的状态,这实际上与您无关。
虽然反应堆确实有一点反省支持。例如,有IReactorTime.getDelayedCalls
,IReactorFDSet.getReaders/getWriters
和IReactorThreads.getThreadPool
。但是,没有IReactorWin32Events.getAllEvents
,所以这不是一套完全可移植的东西。如果您想为调试和诊断目的贡献更多的反应堆内省实现,我们非常感激。