मेरा एप्लिकेशन 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 आधारित एप्लिकेशन भर में लगातार है),।
पर्यावरण कॉल के किस हिस्से दर्द पैदा कर रहा है? क्या हम प्रोफाइल जानकारी देख सकते हैं? –
प्रोफ़ाइल जानकारी के लिए धन्यवाद, यह वास्तव में इस पर कोई प्रकाश नहीं डालता है (4000 कॉल के अलावा अचार!)। मुझे लगता है कि मुझे पूरी चीज देखने की ज़रूरत होगी। –
शायद फ्रीनोड पर #pocoo पर आते हैं, और हम इसके बारे में बात कर सकते हैं? –