迭代的irc python机器人-缓冲消息

3
“为什么我用transport.write发送的数据需要很长时间才能到达连接的另一端?”Twisted只有在您将执行控制权交给反应器后才能发送数据。例如,如果您有一个无限循环向传输写入数据,由于控制权永远不会离开您的代码并返回到反应器,所以实际上永远不会发送数据。” 我在Twisted FAQ中找到了这个问题,这正是我的问题。有没有办法解决这个问题,使我可以立即发送消息而不必等待循环完成?

没有一个简单的方法可以刷新Twisted的出站缓冲区,你应该保持执行轻量化。 - Jakob Bowyer
但是我的机器人需要这个。我需要使用一个命令写入10行(每2秒钟1行)。由于Twisted一次性写入所有行,这是不可能的,而且会导致过度洪泛。 - Bubo
只需使用\n一次性编写5行。 - Jakob Bowyer
你在调用 reactor.run() 吗? - stark
1
我已经修复了,似乎有一个可以设置的lineRate。它有效了。:) 不管怎样,谢谢大家。 - Bubo
显示剩余2条评论
1个回答

4

不可以立即发送消息,必须将控制返回到事件循环。不过幸运的是,你实际想要解决的问题(从问题注释中推断出来),即限制发送的消息速率,并不需要能够立即发送消息。相反,停止在循环中使用time.sleep,开始使用reactor.callLater来延迟代码执行。或者使用IRC API的功能来代替这些操作(你似乎已经发现了lineRate)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接