2009-03-06 17 views
9

मेरा एप्लिकेशन Google App Engine पर चल रहा है और अधिकांश अनुरोधों को लगातार उच्च CPU उपयोग के कारण पीले रंग का ध्वज मिलता है। प्रोफाइलर का उपयोग करके मैंने jinja2.Environment उदाहरण बनाने की दिनचर्या को इस मुद्दे को ट्रैक किया।Jinja2 पर्यावरण निर्माण को अनुकूलित करना

from jinja2 import Environment, FileSystemLoader 
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS)) 
Google AppEngine आपरेशन मोड (सीजीआई), इस कोड को हर अनुरोध पर चलाया जा सकता है के कारण

(उनके मॉड्यूल आयात कैश कैश करने के लिए लगता है:

मैं मॉड्यूल स्तर पर उदाहरण बना रहा हूं मिनटों के बजाय सेकंड के लिए मॉड्यूल)।

मैं मेमकेचे में पर्यावरण के उदाहरण को संग्रहीत करने के बारे में सोच रहा था, लेकिन ऐसा लगता है कि यह पिकनीय नहीं है। FileSystemLoader उदाहरण पिकलेबल लगता है और इसे कैश किया जा सकता है, लेकिन मैंने इस दृष्टिकोण के साथ CPU उपयोग में कोई भी महत्वपूर्ण सुधार नहीं देखा।

कोई भी jinja2.Environment उदाहरण बनाने के ऊपरी हिस्से को कम करने का तरीका सुझा सकता है?

संपादित करें: नीचे प्रोफाइलर आउटपुट का (प्रासंगिक) हिस्सा है।

222172 function calls (215262 primitive calls) in 8.695 CPU seconds 

ncalls tottime percall cumtime percall filename:lineno(function) 
    33 1.073 0.033 1.083 0.033 {google3.apphosting.runtime._apphosting_runtime___python__apiproxy.Wait} 
438/111 0.944 0.002 2.009 0.018 /base/python_dist/lib/python2.5/sre_parse.py:385(_parse) 
    4218 0.655 0.000 1.002 0.000 /base/python_dist/lib/python2.5/pickle.py:1166(load_long_binput) 
     1 0.611 0.611 0.679 0.679 /base/data/home/apps/with-the-flow/1.331879498764931274/jinja2/environment.py:10() 

एक कॉल, लेकिन जहां तक ​​मैं सबसे महंगी पूरे अनुरोध प्रसंस्करण चक्र में देख सकते हैं (और यह सब मेरी GAE आधारित एप्लिकेशन भर में लगातार है),।

+0

पर्यावरण कॉल के किस हिस्से दर्द पैदा कर रहा है? क्या हम प्रोफाइल जानकारी देख सकते हैं? –

+0

प्रोफ़ाइल जानकारी के लिए धन्यवाद, यह वास्तव में इस पर कोई प्रकाश नहीं डालता है (4000 कॉल के अलावा अचार!)। मुझे लगता है कि मुझे पूरी चीज देखने की ज़रूरत होगी। –

+0

शायद फ्रीनोड पर #pocoo पर आते हैं, और हम इसके बारे में बात कर सकते हैं? –

उत्तर

10

में आर्मिन करने का सुझाव दिया अजगर कोड के लिए पूर्व संकलन Jinja2 टेम्पलेट्स, और उत्पादन में संकलित टेम्पलेट्स का उपयोग करें। तो मुझे लगता है कि के लिए एक संकलक/लोडर कर दिया है, और अब यह 13 गुना तेजी से कुछ जटिल टेम्पलेट्स renders दूर सभी पार्स भूमि के ऊपर फेंक। भंडार के लिंक के साथ संबंधित चर्चा here है।

+0

धन्यवाद, रॉड्रिगो, यह वही है जो मैं ढूंढ रहा हूं। :) – zgoda

+0

वहां पर अधिकांश लिंक अब मान्य नहीं हैं। क्या आप भंडार साझा कर सकते हैं? – Bugs

4

ठीक है, लोग, यह मैं क्या #pocoo पर आज मिल गया है:

[20:59] Zgoda: हैलो, मैं जानना चाहते हैं कि मैं अपने jinja2 वातावरण बनाने की प्रक्रिया, समस्या का अनुकूलन कर सकता है चाहते हैं - >Optimizing Jinja2 Environment creation

[21:00] Zgoda: मैं "ठंडा" से प्रोफाइलर उत्पादन एप्लिकेशन ->http://paste.pocoo.org/show/107009/

[21:01] Zgoda: और 'हॉट' के लिए ->

[21 : 02] zgoda: मुझे आश्चर्य है कि मैं कुछ हद तक कम कर सकता था "ठंडा" अनुरोधों के लिए वातावरण बनाने का सीपीयू लागत

[21:05] mitsuhiko: Zgoda: एक मॉड्यूल है कि आप आयात

[21:05] mitsuhiko में env निर्माण कर दिया: जैसे

[ 21:05] mitsuhiko: आपके आवेदन से।utils आयात env

[21:05] Zgoda: यह पहले से ही वहाँ

[21:06] mitsuhiko: हम्म

[21:06] mitsuhiko: मुझे लगता है कि समस्या यह है कि टेम्पलेट फिर से कर रहे हैं -संकलनः प्रत्येक एक्सेस

[21:06] mitsuhiko: दुर्भाग्य से gae अविश्वसनीय सीमित, मैं अगर वहाँ बहुत है मैं कर सकता हूँ पता नहीं है वर्तमान

[21:07] Zgoda: मैं जिंजा bytecache साथ करने की कोशिश की लेकिन यह प्रोड पर काम नहीं करता है (यह सर्वर पर है)

[21:08] mitsuhiko: मुझे पता है

[21:08] mitsuhiko: ऐप्लिकेशन इंजन नहीं है मार्शल

[21:12] Zgoda: mitsuhiko: धन्यवाद

[21 : 13] Zgoda: मुझे लगता है मैं कुछ गलत कर रहा हूँ और यह अनुकूलित किया जा सकता है उम्मीद कर रहा था ...

[21:13] mitsuhiko: Zgoda: अगली फिल्म में सुधार ऐप्लिकेशन इंजन समर्थन के साथ आ जाएगा, लेकिन मुझे यकीन है कि नहीं कर रहा हूँ फिर भी

के लिए बेहतर कैशिंग को कार्यान्वित करने के लिए कैसे करें

ऐसा लगता है कि आर्मीन एपइंजिन पर बाइटकोड कैशिंग के साथ समस्याओं से अवगत है और जीएई पर कैशिंग की अनुमति देने के लिए जिनजा 2 में सुधार करने की कुछ योजनाएं हैं। मुझे आशा है कि चीजें समय के साथ बेहतर हो जाएंगी।

+0

निश्चित रूप से वहाँ यह कम से कम मोटे तौर पर के रूप में तेजी से लोड करने के लिए एक तरह से हो गया है के रूप में निर्मित Django टेम्पलेट लायब्रेरी जब तक कि वे इसके लिए विशेष प्रीलोड करना सौभाग्य की बात किसी तरह का ... – gravitation

+0

आईआरसी आर्मिन पर बाद में कहा कि वह कुछ विचार कैसे है देना जीएई पर चीजों को बेहतर बनाने के लिए। कुछ आशा है। :) – zgoda

+0

Peterh एक पोस्ट है कि उपयोगी हो सकता है बनाया: http://groups.google.com/group/google-appengine/msg/cf207d882941cf8d – gravitation

2

इस google recipe के अनुसार आप bytecodes कैश करने के लिए मेम्कैश उपयोग कर सकते हैं। आप टेम्पलेट फ़ाइल सामग्री को भी कैश कर सकते हैं। सभी एक ही नुस्खा

+0

मार्शल Google ऐप इंजन पर उपलब्ध नहीं है, इसलिए नुस्खा का हिस्सा काम नहीं करेगा। मैं वास्तव में जिन्जा में अपना ऐप माइग्रेट कर रहा हूं। रिपोर्ट करेगा कि यह कैसे चला गया – bustrofedon

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