2010-08-15 21 views
10

Qué bibliotecas le permiten controlar la velocidad de descarga de las solicitudes de red (http en particular). No veo nada incorporado en urllib2 (ni en (Py) Qt que pretendo usar).Disminución del ancho de banda en Python

¿Puede el ancho de banda de control torcido? Si no, ¿cómo puedo controlar el tamaño del buffer de lectura de urllib2 o Twisted? sleep para suspender las operaciones de red no es una opción.

Respuesta

8

Por supuesto lata retorcida. Quiere twisted.protocols.policies.ThrottlingFactory. Simplemente envuelva su fábrica existente en ella antes de pasarla a cualquier persona que quiera una fábrica.

+1

¿Puedes publicar un ejemplo completo? Estoy un poco perdido por todas las clases. –

8

urllib2 no ofrece una forma de hacerlo, por lo que tendrías que extender algunas de las clases que utiliza e implementar la limitación de velocidad por ti mismo. Es posible que desee mirar this question. Si decide escribir un limitador, lea los algoritmos token bucket y leaky bucket.

Como alternativa, puede usar pycurl junto con la opción CURLOPTMAXRECVSPEEDLARGE.

EDITAR: El paquete urlgrabber parece ser compatible con la regulación también, y es probablemente más fácil de entender que pycurl.

Si prefiere programar usando un modelo de bucle de evento, existe el enfoque Twisted, que ya se ha mencionado en otra respuesta.

Cuestiones relacionadas