有没有办法在Twisted http客户端中限制下载速率? 如果没有,最简单的实现这样一个客户端的方法是什么?
有没有办法在Twisted http客户端中限制下载速率? 如果没有,最简单的实现这样一个客户端的方法是什么?
IProducer.pauseProducing
和IProducer.resumeProducing
来实现。pauseProducing
和resumeProducing
以将带宽使用限制在所需水平。IResponse.deliverBody
时,您提供的协议将附加到提供IProducer
的对象上。当您暂停和恢复该对象时,您正在控制从网络读取响应正文的速率。class SlowDownloader(Protocol):
def __init__(self, reactor):
self.reactor = reactor
def dataReceived(self, data):
print 'Received', len(data), 'bytes'
self.transport.pauseProducing()
# Delay further reading so that the download proceeds at
# 1kB/sec at the fastest.
delay = len(data) / 1024.0
self.reactor.callLater(delay, self.transport.resumeProducing)
requesting = agent.request(...)
def requested(response):
response.deliverBody(SlowDownloader())
requesting.addCallback(requested)
这并不是一个特别好的速率限制实现。如果resumeProducing
被调用和下一次dataReceived
调用之间有很长的延迟,它可能会比您预期的要慢。 但修复这个问题只是做更多的基于时间的数学计算。
agent.request
进行手动控制,但是您是正确的,这些问题不应该被称为非常相似。 - mockinterface