2010-08-15 20 views
10

Jakie biblioteki pozwalają kontrolować prędkość pobierania żądań sieciowych (w szczególności http). Nie widzę niczego wbudowanego w urllib2 (ani w (Py) Qt, które zamierzam użyć).Ograniczanie przepustowości w języku Python

Czy skręcona szerokość pasma sterowania? Jeśli nie, w jaki sposób mogę kontrolować rozmiar bufora odczytu urllib2 lub Twisted? sleep ing do zawieszenia operacji sieciowych nie jest opcją.

Odpowiedz

8

Oczywiście, że można skręcić. Chcesz twisted.protocols.policies.ThrottlingFactory. Po prostu zapakuj swoją istniejącą fabrykę, zanim przekażesz ją do fabryki.

+1

Czy możesz zamieścić pełny przykład? Jestem trochę zagubiony przez wszystkie klasy. –

8

urllib2 nie oferuje sposobu, aby to zrobić, więc musisz rozszerzyć niektóre z klas, których używa i implementować ograniczanie stawek samodzielnie. Możesz spojrzeć na this question. Jeśli zdecydujesz się na napisanie ogranicznika, przeczytaj o algorytmach token bucket i leaky bucket.

Alternatywnie można użyć opcji pycurl wraz z opcją CURLOPTMAXRECVSPEEDLARGE.

EDYCJA: Pakiet urlgrabber wydaje się również wspomagać dławienie i jest prawdopodobnie łatwiejszy do zrozumienia niż pycurl.

Jeśli wolisz programować przy użyciu modelu pętli zdarzeń, istnieje metoda Twisted, o której już wspomniano w innej odpowiedzi.