2012-09-05 7 views
12

में प्रत्येक पृष्ठ के लिए निष्पादन समय की गणना करें पाइथन की फ्लास्क लाइब्रेरी का उपयोग करके प्रत्येक पृष्ठ लोड के निष्पादन समय की गणना करने का एक अच्छा तरीका क्या है?पायथन के फ्लास्क

मैं विचारों में एक शुरुआत टाइमर डालने की सोच रहा था/__ init__.py:

@app.before_request 
def before_request(): 
    g.start = time.time() 

लेकिन जहाँ मैं टाइमर के अंत हिस्सा डाल अंतर की गणना करने के लिए, और कैसे मैं इस पर मिलेगा मेरे एचटीएमएल टेम्पलेट के पाद लेख?

धन्यवाद।

उत्तर

11

teardown_request समारोह में यह रखो:

@app.teardown_request 
def teardown_request(exception=None): 
    diff = time.time() - g.start 
    ... 

teardown_request में आप जवाब बदलने की अनुमति नहीं है, तो आप अपने जवाब में गणना की स्ट्रिंग का उपयोग करना after_request उपयोग करना चाहते हैं:

@app.after_request 
def after_request(response): 
    diff = time.time() - g.start 
    if (response.response): 
     response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff)) 
    return response 
+0

मैं इसे अपने टेम्पलेट में कैसे प्राप्त करूं? ऐसा नहीं है कि सभी प्रतिपादन समाप्त होने के बाद? – ensnare

+1

ensnare - समय की गणना करने के बाद टेम्पलेट प्रस्तुत करना एक अच्छा विचार नहीं है, क्योंकि आप इस तरह से प्रस्तुत समय को अनदेखा कर रहे हैं, लेकिन प्रतिक्रिया के लिए गणना समय को जोड़ने के लिए मेरे अपडेट की जांच करें। – MostafaR

+1

मैंने अपने पहले_request() फ़ंक्शन में g.start = time.time() डाल दिया है, और आपका कोड after_request() फ़ंक्शन में है। लेकिन जब मैं ऐसा करता हूं, after_request() g.start नहीं देख सकता है। मुझे त्रुटि मिलती है: '_RequestGlobals' ऑब्जेक्ट में कोई विशेषता नहीं है 'शुरू करें' – ensnare

2

आप सामग्री-लंबाई शीर्षलेख को अपडेट करने की भी आवश्यकता है अन्यथा ब्राउज़र परेशान हो जाते हैं (और क्रोम अप्रत्याशित परिणाम देता है)।

@app.after_request 
def after_request(response): 
    diff = time.time() - g.start 
    if app.debug: 
     print "Exec time: %s" % str(diff) 

    if (response.response): 
     response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff)) 
     response.headers["content-length"] = len(response.response[0]) 

    return response 
1

मैं "टूटी पाइप त्रुटि" पुनर्निर्देशन (HTTP 301) के साथ पीटर किसान जवाब के साथ स्थिर फ़ाइलें, और समस्याओं की सेवा के लिए किया था, तो मैं प्रदान की कोड देखते है, अगर यह मदद करता है।

@app.after_request 
def after_request(response): 
    diff = int((time.time() - g.start) * 1000) # to get a time in ms 

    if (response.response and response.content_type.startswith("text/html") and response.status_code==200): 
     response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff)) 

    return response