我有一个长期运行的子流程,扭曲产生。 我已经将这个过程协议子类化了,我知道当我收到std out,std err等时 我希望能够通过共享变量或全局类或其他东西来检查这些正在运行的进程的状态。(/在一系列时间内)单独的http请求。
如何让子进程协议的事件监听器“删除”数据,以便以后的http请求“拾取”。
答案 0 :(得分:3)
制作一个“邮箱”对象;为了论证,让我们说它是一个列表。这可以是字典,对象,文件或数据库;任何你想要的。适用于您的应用程序。
然后,当您实例化ProcessProtocol
时,传递对邮箱的引用。相关数据到达时,self.mailbox.append(relevantData)
。
此外,将对此对象的引用传递给响应这些请求的HTTP资源。然后,在render_GET
,relevantData = self.mailbox.pop()
。
在Twisted中没有神奇的方法可以做到这一点。这完全取决于您的应用程序的许多不同内容以及您希望存储和管理此数据的方式,Twisted明确地 不负责。
你在这里问的问题实际上只是归结为:“我有一个对象a
(你的进程协议)和一个对象b
(你的HTTP资源)。我怎么做让a
调用b
上的方法?This FAQ在Twisted社区中以各种形式出现,一遍又一遍,但很难写出一个很好的可重用答案因为每个人都认为他们在问一个不同的问题。
Twisted正在做什么 - 所有 Twisted 永远正在做 - 真的 - 映射过程外部事件的发生 - 从子进程,网络到达的数据 - 方法调用你的过程。如何在内部排列对象,如何在它们之间保持引用,以及如何处理Twisted刚刚给出的数据,完全取决于您。这种架构是Twisted如此强大的原因。当你学会从回调中抓取错误代码时,你就该离开了:)。