Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
“为什么我用 transport.write 发送的数据需要很长时间才能到达连接的另一端?” Twisted 只能在您放弃对反应器的执行控制后才能发送数据。例如,如果您有一个无限循环将数据写入传输,则数据将永远不会真正发送,因为控制永远不会离开您的代码并返回反应堆。”
“为什么我用 transport.write 发送的数据需要很长时间才能到达连接的另一端?”
Twisted 只能在您放弃对反应器的执行控制后才能发送数据。例如,如果您有一个无限循环将数据写入传输,则数据将永远不会真正发送,因为控制永远不会离开您的代码并返回反应堆。”
我在扭曲的常见问题解答中发现了这一点,这正是我的问题。有没有办法解决这个问题,所以我可以立即发送消息而不是等待循环完成?
不可以。您不能立即发送消息。控制必须返回到事件循环。幸运的是,您真正要解决的问题(从对问题的评论推断),限制您发送的消息的速率,并不需要能够做到这一点。相反,停止time.sleep在循环中使用并开始使用reactor.callLater来延迟代码的执行。或者使用 IRC API 的特性来为你做这些事情(你似乎已经发现了,lineRate)。
time.sleep
reactor.callLater
lineRate