पर gevent/grequests के साथ अजीब अवरोध व्यवहार निम्नलिखित कोड प्रत्येक 200ms के लिए अनुरोध भेजता है और जब भी वे आते हैं तो प्रतिक्रियाओं को असीमित रूप से संभालना चाहिए।HTTPS
HTTP पर यह अपेक्षा के अनुसार काम करता है - प्रत्येक 200ms का अनुरोध भेजा जाता है और जब भी कोई प्रतिक्रिया आती है तो प्रतिक्रिया कॉलबैक स्वतंत्र रूप से कॉल किया जाता है। हालांकि, HTTPS से अधिक, जब भी प्रतिक्रिया आती है तो अनुरोधों में काफी देरी हो जाती है (भले ही मेरा प्रतिक्रिया हैंडलर कोई काम न करे)। प्रतिक्रिया कॉलबैक प्रत्येक अनुरोध के लिए दो बार कहा जाता है, एक बार शून्य-लंबाई प्रतिक्रिया के साथ (संपादित करें: यह एक पुनर्निर्देशन के कारण है और अवरोधक मुद्दे से संबंधित नहीं लगता है, धन्यवाद Padraic)।
HTTPS पर इस अवरोध व्यवहार का कारण क्या हो सकता है? (www.bbc.co.uk
सिर्फ एक उदाहरण है जो भौगोलिक रूप से मुझसे दूर है, लेकिन यह परीक्षण किए गए सभी सर्वरों के साथ होता है)।
grequests_test.py
import time
import sys
import grequests
import gevent
def cb(res, **kwargs):
print("**** Response", time.time(), len(res.text))
for i in range(10):
unsent = grequests.get(sys.argv[1], hooks={'response': cb})
print("Request", time.time())
grequests.send(unsent, grequests.Pool(1))
gevent.sleep(0.2)
gevent.sleep(5)
$ ipython2 grequests_test.py 'http://www.bbc.co.uk'
(अपेक्षित परिणाम)
('Request', 1459050191.499266)
('Request', 1459050191.701466)
('Request', 1459050191.903223)
('Request', 1459050192.10403)
('Request', 1459050192.305626)
('**** Response', 1459050192.099185, 179643)
('Request', 1459050192.506476)
('**** Response', 1459050192.307869, 179643)
('Request', 1459050192.707745)
('**** Response', 1459050192.484711, 179643)
('Request', 1459050192.909376)
('**** Response', 1459050192.696583, 179643)
('Request', 1459050193.110528)
('**** Response', 1459050192.870476, 179643)
('Request', 1459050193.311601)
('**** Response', 1459050193.071679, 179639)
('**** Response', 1459050193.313615, 179680)
('**** Response', 1459050193.4959, 179643)
('**** Response', 1459050193.687054, 179680)
('**** Response', 1459050193.902827, 179639)
ipython2 grequests_test.py 'https://www.bbc.co.uk'
(अनुरोध देर भेजा जाता है)
('Request', 1459050203.24336)
('Request', 1459050203.44473)
('**** Response', 1459050204.423302, 0)
('Request', 1459050204.424748) <------------- THIS REQUEST TIME IS LATE
('**** Response', 1459050205.294426, 0)
('Request', 1459050205.296722)
('Request', 1459050205.497924)
('**** Response', 1459050206.456572, 0)
('Request', 1459050206.457875)
('**** Response', 1459050207.363188, 0)
('**** Response', 1459050208.247189, 0)
('Request', 1459050208.249579)
('**** Response', 1459050208.250645, 179643)
('**** Response', 1459050208.253638, 179643)
('Request', 1459050208.451083)
('**** Response', 1459050209.426556, 0)
('Request', 1459050209.428032)
('**** Response', 1459050209.428929, 179643)
('**** Response', 1459050210.331425, 0)
('**** Response', 1459050211.247793, 0)
('Request', 1459050211.251574)
('**** Response', 1459050211.252321, 179643)
('**** Response', 1459050211.25519, 179680)
('**** Response', 1459050212.397186, 0)
('**** Response', 1459050213.299109, 0)
('**** Response', 1459050213.588854, 179588)
('**** Response', 1459050213.590434, 179643)
('**** Response', 1459050213.593731, 179643)
('**** Response', 1459050213.90507, 179643)
('**** Response', 1459050213.909386, 179643)
ध्यान दें कि अगला अनुरोध अगले अनुरोध के बाद लंबे समय तक पहुंचने लगता है भेजा गया था लेकिन नहीं था। नींद की वापसी क्यों नहीं हुई, और अगला अनुरोध भेजा गया, इससे पहले कि पहली प्रतिक्रिया आ गई?
ठीक है, जो 0 लंबाई प्रतिक्रियाओं को बताता है। आप सही हैं, यह अन्य डोमेन पर नहीं होता है। अवरुद्ध करने के बारे में कोई विचार? – akxlr