【问题标题】:twisted reactor invocations on separate thread单独线程上的扭曲反应器调用
【发布时间】:2012-09-04 13:04:32
【问题描述】:

我正在开发一个应用程序,该应用程序涉及使用 twisted api 通过 tcp 获取数据。 我们的进程是侦听器应用程序,它不断侦听事件并执行以下操作..

  1. 处理事件通知并构建字典以将其发送到第三方应用程序
  2. 为了完成字典..它使用twisted api调用一个进程来获取一些额外的数据并完成字典。

在单次执行后,我无法在主线程上执行扭曲的 api 执行。.reactor 停止并且主线程没有进一步的进展..

我想要的是:

  1. 对于每个事件通知 --- 假脱机一个新线程以通过 tcp 进行扭曲调用以获取数据。
  2. 将 mainThread 与 newThread 连接以等待其完成
  3. 获取结果,与一半构建的字典合并并将其发送到第三方应用程序。

假设我在主线程中监听 eventObj1 ---

处理涉及到前 step1---step2---step3---step4--send to party 的步骤。

假设第 4 步涉及通过 tcp 获取数据,我们应该等到结果可用,然后才能完成字典并将其发送给第三方。

所以当 eventObj1 到来时,我将它排队以通过 tcp 获取.. 这样做时我说 reactor.start() (反应器在主线程中启动) 一段时间后我得到数据和回调是调用的 dict 是为 event1 构建的并发送给第三方。

但是我不能再排队等待数据获取,直到我做reactor.stop() ..因为直到reactor.stop() 不被调用主线程不能回去处理eventObj2 ..

所以我认为,我需要的是在单独的线程中启动反应器..并在主程序退出之前继续排队来自主线程停止反应器的事件

【问题讨论】:

  • 不清楚为什么您需要线程。哪些部分强制使用线程?您上面提到的所有事情在使用扭曲 API 和延迟的主线程中听起来完全可行。
  • 你不想使用线程。您的程序只是有一个错误。反应堆不会自行停止。请附上您遇到的问题的sscce.org

标签: python multithreading twisted


【解决方案1】:

您不需要任何线程。你只是想让反应器做多件事,这实际上是拥有反应器的全部意义。请参阅此问题以获得解释:Twisted reactor starting multiple times in a single program?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2015-05-04
    相关资源
    最近更新 更多