سؤال

يعمل تطبيقي على Google App Engine وتحصل معظم الطلبات باستمرار على علامة صفراء بسبب الاستخدام العالي لوحدة المعالجة المركزية.باستخدام ملف التعريف، قمت بتتبع المشكلة وصولاً إلى روتين الإنشاء jinja2.Environment مثال.

أقوم بإنشاء المثيل على مستوى الوحدة النمطية:

from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))

نظرًا لوضع تشغيل Google AppEngine (CGI)، يمكن تشغيل هذا الرمز عند كل طلب (يبدو أن ذاكرة التخزين المؤقت لاستيراد الوحدة النمطية الخاصة بهم تخزن الوحدات مؤقتًا لمدة ثوانٍ بدلاً من دقائق).

كنت أفكر في تخزين مثيل البيئة في ذاكرة التخزين المؤقت، ولكن يبدو أنه غير قابل للاختيار. FileSystemLoader يبدو أن هذا المثال قابل للاختيار ويمكن تخزينه مؤقتًا، لكنني لم ألاحظ أي تحسن كبير في استخدام وحدة المعالجة المركزية باستخدام هذا الأسلوب.

يمكن لأي شخص أن يقترح طريقة لتقليل تكاليف الإنشاء 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)، هي الأكثر تكلفة في دورة معالجة الطلب بأكملها.

هل كانت مفيدة؟

المحلول

اقترح أرمين تجميع قوالب Jinja2 مسبقًا إلى كود بايثون، واستخدام القوالب المجمعة في الإنتاج.لذلك قمت بإنشاء مترجم/محمل لذلك، وهو الآن يعرض بعض القوالب المعقدة بشكل أسرع 13 مرة، مما يؤدي إلى التخلص من الجميع التحليل العلوي.المناقشة ذات الصلة مع الرابط إلى المستودع هي هنا.

نصائح أخرى

وOK، والناس، وهذا هو ما حصلت عليه اليوم على #pocoo:

و[20:59] زغودا: مرحبا، أود أن أعرف ما إذا كنت يمكن تحسين عملية بلدي خلق بيئة jinja2، والمشكلة -> <وأ href = "https://stackoverflow.com/questions/618827/optimizing -jinja2 للبيئة خلق "> تحسين خلق بيئة Jinja2

و[21:00] زغودا: لدي الانتاج التعريف من "البرد" التطبيق -> HTTP: //paste.pocoo.org/show/107009/

و[21:01] زغودا: ول "الساخنة" -> HTTP: // عجينة. pocoo.org/show/107014/

و[21:02] زغودا: أنا أتساءل عما اذا كان قد خفض إلى حد ما من حيث التكلفة وحدة المعالجة المركزية لخلق بيئة لطلبات "الباردة"

و[21:05] ميتسوهيكو: زغودا: وضع خلق الحياة الفطرية في وحدة نمطية التي تقوم باستيراد

و[21:05] ميتسوهيكو: مثل

و[21:05] ميتسوهيكو: من yourapplication.utils الحياة الفطرية استيراد

و[21:05] زغودا: انها بالفعل هناك

و[21:06] ميتسوهيكو: هم

و[21:06] ميتسوهيكو: أعتقد أن المشكلة هي أن القالب يتم إعادة تجميع-كل الوصول

و[21:06] ميتسوهيكو: للأسف GAE لا يصدق محدودة، وأنا لا أعرف إذا كان هناك الكثير يمكن أن أفعله حاليا

و[21:07] زغودا: حاولت مع bytecache جينجا ولكنه لا يعمل على همز (على على الخادم ديف)

و[21:08] ميتسوهيكو: أنا أعلم

و[21:08] ميتسوهيكو: إلى AppEngine لم يقم مارشال

و[21:12] زغودا: ميتسوهيكو: شكرا لك

و[21:13] زغودا: كنت آمل أنا أفعل شيئا خاطئا، وهذا يمكن أن يكون الأمثل ...

و[21:13] ميتسوهيكو: زغودا: سوف الإصدار التالي تأتي مع تحسين الدعم المقدم إلى AppEngine، ولكن لست متأكدا حتى الآن كيفية تنفيذ تحسين التخزين المؤقت لعبد اللطيف

ويبدو ارمين يدرك مشاكل مع التخزين المؤقت بايت كود على إلى AppEngine ولديه بعض الخطط لتحسين Jinja2 للسماح التخزين المؤقت على GAE. آمل أن الأمور ستتحسن مع مرور الوقت.

scroll top