transfer rate limiting in socket.py

Jean-Paul Calderone exarkun at divmod.com
Sat Jun 17 01:40:46 EDT 2006


On 16 Jun 2006 13:53:48 -0700, Peter Silva <peter.silva at ec.gc.ca> wrote:
>Hi folks,
>
>I have a need in a network data distribution application to send out
>data to folks who want it using the protocol of their choice.   I´d
>like it to support a variety of protocols and I don´t want to
>implement any of them :-)
>http, ftp (via ftplib) , https (dunno how yet), ssl, ssh, sftp (via
>paramiko)
>
>The thing is... I want rate-limiting so that in the case of a failure
>of a single client
>I don´t penalize the other clients, or if my server (which is acting
>as a client pushing to remote servers.) goes down, it doesn´t saturate
>the link when it comes back.
>
>So I want to have all the protocols limit the number of bytes they send
>per second.
>It looks like the easiest way to do this is to dive into socket.py...
>and look! it says:
>
># Wrapper module for _socket, providing some additional facilities
># implemented in Python.
>
>note the ´additional facilities implemented in python´ ...
>
>so we just add logic to:
>-- add a ´maxrate´ argument to the constructor and/or an attribute to
>modify the setting...
>--  tally bytes, and time, and know when we are going ´too fast´
>--  when too fast..  in the ´flush´ routine, in the synchronous case,
>sleep for the correct time to come back under budget.  in the async,
>return without writing.
> -- do something similar for reading.
>
> Anybody think this would be fun?

Use Twisted instead.  It supports every protocol you mentioned, and
rate limiting too.

Jean-Paul



More information about the Python-list mailing list