假设我通过TCP连接以高速率接收数据。我必须对它进行某种处理。因为我不想阻塞reactor线程,所以我将处理卸载到后台线程。
数据到达的速度比我处理的速度快。如果我将数据放入队列,队列将无限增长。
有没有办法告诉twisted暂停接收数据?
TCP协议可以迫使发送方减慢速度。如果我处理reactor线程(这不是一个选项,因为周围有其他性能更好的TCP连接),就会发生这种情况。
如果您正在实现 Protocol 你的 transport 属性可能是 IPushProducer 这意味着你只需要打电话 self.transport.pauseProducing() 然后 self.transport.resumeProducing() 只要你想让它再次向你提供数据。如果你只是想限速,你可以打电话 resumeProducing() 短暂延迟后,使用 reactor.callLater() .
Protocol
transport
IPushProducer
self.transport.pauseProducing()
self.transport.resumeProducing()
resumeProducing()
reactor.callLater()