2012-06-22 15 views
27

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

समस्या यह है कि पूर्ण प्रतिक्रिया प्राप्त करने के लिए किए गए समय को मापने के लिए इसमें कोई अंतर्निहित कार्यक्षमता नहीं है। इसके लिए मैंने सोचा कि मैं timeit मॉड्यूल का उपयोग करूंगा।

क्या मुझे यकीन है कि के बारे में है अगर मैं बहुत तरह timeit चलने वाले नहीं कर रहा हूँ: मैं मैं वास्तव में समय यह प्रतिक्रिया ले लिया पहुंचने के लिए या यह समय इसके लिए लेता है मापने हूँ

t = timeit.Timer("requests.get('http://www.google.com')", "import requests") 

अनुरोध, भेजा, प्राप्त, आदि का अनुरोध करने के लिए अनुरोध? मुझे लगता है कि मैं उस विलुप्त होने का समय उपेक्षा कर सकता हूं क्योंकि मैं बहुत लंबे समय तक देरी (~ 700 एमएमएस) के साथ नेटवर्क का परीक्षण कर रहा हूं?

क्या इस प्रोग्राम को करने का कोई बेहतर तरीका है?

उत्तर

19

अपने प्रश्न के लिए के रूप में, यह कुल समय के लिए

  1. समय अनुरोध वस्तु
  2. संदेश अनुरोध
  3. प्रतिक्रिया
  4. पार्स प्रतिक्रिया (थॉमस ओरोज्को से टिप्पणी देखें) प्राप्त करें बनाने के लिए किया जाना चाहिए

एकल अनुरोध लोड समय को मापने के अन्य तरीके urllib का उपयोग करना है:

nf = urllib.urlopen(url) 
start = time.time() 
page = nf.read() 
end = time.time() 
nf.close() 
# end - start gives you the page load time 
+5

+ 4. HTTP प्रतिसाद –

+1

यह वास्तव में अच्छा लग रहा है पार्स, लेकिन कम से देख उदाहरणों में से एक मैं '1 देखता हूं। start_timer = time.time() 2. ओपन ब्राउजर + पढ़ें प्रतिक्रिया 3. विलंबता = time.time() - start_timer' क्या यह वही समस्या होगी? – cookM

+0

@cookM: मैंने इसे समस्या के रूप में नहीं देखा लेकिन अनुरोध विलंबता का वास्तविक समय अनुभव क्या होगा। असल में यह कई अनुरोधों पर औसत है जो यथार्थवादी समय के करीब होंगे। – pyfunc

105

अनुरोधों के नवीनतम संस्करण में ऐसी कार्यक्षमता है:

http://docs.python-requests.org/en/latest/api/?highlight=elapsed#requests.Response.elapsed

उदाहरण के लिए:

requests.get("http://127.0.0.1").elapsed.total_seconds() 
+24

: 'request.get (" http://127.0.0.1 ") .elapsed.total_seconds()' –

+1

मीकल ओस्ल की टिप्पणी में जोड़ने के लिए: 'total_seconds()' एक दशमलव संख्या है जिसमें माइक्रोसॉन्ड परिशुद्धता होती है। – Luc

+4

क्लाइंट साइड पर अपने कोड को प्रोफाइलिंग और अनुकूलित करने के लिए इसका उपयोग न करें। यह केवल सर्वर के प्रतिक्रिया समय को मापता है (जो ओपीएस सवाल था)। _ अनुरोध भेजने और प्रतिक्रिया के आगमन (एक timedelta के रूप में) के बीच समय बीत गया। यह संपत्ति विशेष रूप से अनुरोध के पहले बाइट भेजने और शीर्षकों को पार्स करने के बीच किए गए समय को मापती है। इसलिए प्रतिक्रिया सामग्री या स्ट्रीम कीवर्ड तर्क के मूल्य का उपभोग करके यह अप्रभावित है ._ - दस्तावेज़। – ChaimG

संबंधित मुद्दे