Регулирование полосы пропускания в Python

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

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

Ответ 1

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

Ответ 2

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

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

EDIT: urlgrabber пакет также поддерживает дросселирование, и, вероятно, легче понять, чем pycurl.

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