2010-08-15 4 views
10

Какие библиотеки позволяют вам контролировать скорость загрузки сетевых запросов (в частности, http). Я не вижу ничего встроенного в urllib2 (и в (Py) Qt, который я намереваюсь использовать).Регулирование полосы пропускания в Python

Может ли витая ширина полосы управления? Если нет, как я могу контролировать размер буфера чтения urllib2 или Twisted? sleep Включение приостановки сетевых операций не является вариантом.

ответ

8

Конечно, скрученная может. Вы хотите twisted.protocols.policies.ThrottlingFactory. Просто заверните свою существующую фабрику в нее, прежде чем передать ее на все, что захочет фабрику.

+1

Можете ли вы опубликовать полный пример? Я немного потерял все классы. –

8

urllib2 не предлагает способ сделать это, поэтому вам придется расширить некоторые из классов, которые он использует, и реализовать скорость, ограничивающую себя. Вы можете посмотреть на this question. Если вы решите написать ограничитель, прочитайте алгоритмы token bucket и leaky bucket.

В качестве альтернативы вы можете использовать pycurl вместе с опцией CURLOPTMAXRECVSPEEDLARGE.

РЕДАКТИРОВАТЬ: пакет urlgrabber также поддерживает дросселирование, и, вероятно, легче понять, чем pycurl.

Если вы предпочитаете программировать с использованием модели цикла событий, существует подход Twisted, о котором уже упоминалось в другом ответе.

Смежные вопросы