2015-08-18 43 views
2

假設我通過TCP連接以快速接收數據。我必須對它做一些處理。由於我不想阻塞反應器線程,我將處理卸載到後臺線程。Twisted:減慢數據接收

數據到達比我能處理它快。如果我將數據放入隊列中,則隊列無限增長。

有沒有辦法告訴twisted來暫停接收數據?

TCP協議可以強制發件人放慢速度。如果我要處理反應器線程(這不是一個選項,因爲還有其他更好的TCP連接),會發生什麼情況。

+0

@barny這就是我想說的最後一段。數據不會丟失。 TCP協議採取的是。發送方的操作系統會減慢發送速度。 – Stefan

+0

刪除了我的愚蠢評論。這是否有用http://twistedmatrix.com/pipermail/twisted-python/2015-January/029068.html不過,我認爲你可能不得不弄清楚如何實際減慢生產者速度,這樣就限制了數據速率。 – barny

+0

怎麼樣:在一個進程(不是線程)中運行數據處理腳本 - 它會阻止數據被扼殺 - 並在其他進程和不同端口上運行剩餘的數據處理腳本。 – barny

回答

2

如果要實現的Protocol一個子類,你transport屬性可能是一個IPushProducer,這意味着你只需要調用self.transport.pauseProducing()然後self.transport.resumeProducing()只要你想它再次開始給你的數據。如果您只想限制費率,可以在短暫延遲後使用reactor.callLater()撥打resumeProducing()