ProxyAgent तेज़ी से कनेक्ट हो सकता है और फिर प्रतिक्रिया बॉडी के लिए अनिश्चित काल तक प्रतीक्षा कर सकता है। इसके प्रॉक्सी एंडपॉइंट का कनेक्शन टाइमआउट उस बाद की प्रतीक्षा का वर्णन नहीं करता।

एजेंट बनाते समय एंडपॉइंट पर कनेक्शन सीमा सेट करें। नीचे दिए गए सार्वजनिक HTTP अनुरोध के लिए, यदि सार्वजनिक मध्यस्थ अनुमत हैं तो HTTP प्रॉक्सी सूची से एक अन-प्रमाणित उम्मीदवार पता बदल सकता है:

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 और कॉन्फ़िगर किया गया एजेंट है। ProxyAgent का अनुरोध Deferred एक प्रतिक्रिया ऑब्जेक्ट देता है; readBody बॉडी के लिए Deferred लौटाता है। कॉलबैक से इसे लौटाने पर श्रृंखला उस कार्य के लिए भी प्रतीक्षा करती है।

स्थान मायने रखता है। Twisted addTimeout को उन कॉलबैक द्वारा दर्शाए गए काम पर लागू करता है जो उससे पहले स्थापित किए गए थे। बाद में बॉडी रीडर जोड़ना एक अलग सीमा बताएगा। इस व्यवस्था में टाइमर addTimeout कॉल होने पर शुरू होता है और उस श्रृंखला में लंबित अनुरोध तथा बॉडी कार्य को कवर करता है।

बड़े या असीमित बॉडी के लिए स्ट्रीमिंग उपभोक्ता का उपयोग करें और उसका पूरा होना उसी तरह दर्शाएं। क्लाइंट-साइड समय-सीमा यह सीमित करती है कि आपका एप्लिकेशन कितनी देर प्रतीक्षा करता है; यह प्रॉक्सी के अपने अपस्ट्रीम कनेक्शन टाइमआउट को फिर से कॉन्फ़िगर नहीं करती।

संबंधित लेख