Twisted irc python bot - 缓冲消息
Posted
技术标签:
【中文标题】Twisted irc python bot - 缓冲消息【英文标题】:Twisted irc python bot - buffering messages 【发布时间】:2012-06-05 15:31:56 【问题描述】:“为什么我用 transport.write 发送的数据需要很长时间才能到达连接的另一端?”
只有在你放弃对反应器的执行控制后,Twisted 才能发送数据。例如,如果您有一个无限循环将数据写入传输器,则数据将永远不会真正发送,因为控制权永远不会离开您的代码并返回到反应器。”
我在扭曲的常见问题解答中找到了这个,这正是我的问题。有没有办法解决这个问题,以便我可以立即发送消息而无需等待循环完成?
【问题讨论】:
确实没有一种简单的方法来刷新传出的 Twisted 缓冲区,您应该保持轻量级执行。 但我的机器人需要它。我需要用命令写 10 行(每 2 秒 1 行)。这是不可能的,因为twisted 只是在一秒钟内写完所有的行并且它会产生过多的洪水。 用\n
一次写5行
用 \n 一次 5 行是什么意思?
我真的修好了,好像有一个 lineRate 可以设置。有用。 :) 无论如何谢谢大家
【参考方案1】:
没有。您无法立即发送消息。控制必须返回到事件循环。幸运的是,您真正要解决的问题(从问题上的 cmets 推断),限制您发送的消息的速率,并不需要能够做到这一点。相反,停止在循环中使用time.sleep
并开始使用reactor.callLater
来延迟代码的执行。或者使用 IRC API 的特性来为你做这些事情(你似乎已经发现了,lineRate
)。
【讨论】:
以上是关于Twisted irc python bot - 缓冲消息的主要内容,如果未能解决你的问题,请参考以下文章
Twisted Python IRC bot - 如何异步执行函数以便它不会阻塞机器人?