Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bandwidth throttling in Python

What libraries out there let you control the download speed of network requests (http in particular). I don't see anything built-in in urllib2 (nor in (Py)Qt which I intend on using).

Can Twisted control bandwidth? If not, how can I control the read buffer size of urllib2 or Twisted? sleeping to suspend network operations isn't an option.

like image 880
Idan K Avatar asked Aug 15 '10 18:08

Idan K


2 Answers

urllib2 doesn't offer a way to do this, so you'd have to extend some of the classes it uses and implement rate limiting yourself. You might want to look at this question. If you decide to write a limiter, read up on the token bucket and leaky bucket algorithms.

Some attempted hack solutions available on github are Phredward/throttle and minkustree/socket-throttle.

Alternatively, you could use pycurl along with the CURLOPTMAXRECVSPEEDLARGE option.

EDIT: The urlgrabber package appears to support throttling as well, and is probably easier to understand than pycurl.

If you prefer to program using an event loop model, there's the Twisted approach, which has already been mentioned in another answer.

like image 108
ʇsәɹoɈ Avatar answered Nov 11 '22 22:11

ʇsәɹoɈ


Of course twisted can. You want twisted.protocols.policies.ThrottlingFactory. Just wrap your existing factory in it before you pass it to whatever wants a factory.

like image 8
habnabit Avatar answered Nov 11 '22 20:11

habnabit