我有一个Python脚本,有时会运行一个持续~5-60秒的进程。在此期间,对session.publish()
的十次调用将被忽略,直到脚本完成。脚本完成后,所有十条消息都会在洪水中发布。
我已经通过在调试模式下打开 Crossbar.io 路由器来证实这一点,并且在时间结束后(而不是按预期运行时)显示与已发布消息相对应的日志。
有问题的脚本很长,很复杂,包括Crossbar/Twisted/AutobahnPython的组合前端和后端。我觉得如果我试图压缩并包含在这里,我会冒着误报问题的风险。
发布不会立即发生的原因是什么?
到目前为止,几次不成功的尝试:
- 来源:扭曲需要"非阻塞代码"。所以,我尝试合并
reactor.callLater
但没有成功(我也不知道如何为publish
活动做到这一点)。 - 我研究了使用 Pool 生成工作线程来执行发布的想法。
- AutobahnPython 存储库似乎没有任何真正包含这种情况的示例。
谢谢!
发布不会立即发生的原因是什么?
反应堆必须有机会运行才能发生 I/O。 示例代码不允许反应器运行,因为它在用户代码中的while
循环中长时间保持执行。