Дајте Twisted proxy захтеву рок за његово тело
Комбинујте временско ограничење везе proxy endpoint-а са роком Deferred који покрива и читање малог тела одговора.
ProxyAgent може брзо да се повеже, а затим неограничено да чека тело одговора. Временско ограничење везе његовог proxy endpoint-а не описује то касније чекање.
Поставите границу везе на endpoint-у када градите агента. За јавни HTTP захтев испод, неаутентификовани кандидат са листе HTTP proxy-ја може заменити адресу ако су јавни посредници дозвољени:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
За мали одговор који намеравате да прикупите у меморији, укључите читање тела у Deferred ланац пре додавања рока:
from twisted.web.client import readBody
d = agent.request(b'GET', b'http://example.com/')
d.addCallback(readBody)
d.addTimeout(10, reactor)
d.addCallback(lambda body: print(len(body)))
d.addErrback(lambda failure: print(failure.getErrorMessage()))
Исечак претпоставља да апликација већ има свој reactor и конфигурисаног агента. Deferred захтева ProxyAgent-а враћа објекат одговора; readBody враћа Deferred за тело. Враћањем из callback-а ланац чека и ту операцију.
Положај је важан. Twisted примењује addTimeout на рад који представљају callback-ови инсталирани пре њега. Додавање читача тела после описало би другу границу. У овом распореду тајмер почиње када се позове addTimeout и покрива захтев на чекању и рад са телом у том ланцу.
Користите streaming потрошач за велика или неограничена тела и представите његово завршетак на исти начин. Рок на страни клијента ограничава колико дуго ваша апликација чека; он не реконфигурише сопствено временско ограничење везе proxy-ја према узводно.