Gunicorn: طريقة ما لخدمة العديد من تطبيقات WSGI عبر نفس مثيل gunicorn.

تم إنشاؤها على ٢٩ مارس ٢٠١٠  ·  7تعليقات  ·  مصدر: benoitc/gunicorn

هل تعتقد أنها فكرة جيدة إذا كان لدينا طريقة ما لتشغيل الكثير من التطبيقات عبر نفس مثيل gunicorn ، بحيث يستخدمون نفس مترجم (مترجمي) Python.
على الأقل بالنسبة لي ، سيكون هذا مفيدًا للغاية ، لأنه سيوفر الكثير من ذاكرة الوصول العشوائي ، حيث لدي العديد من التطبيقات الصغيرة (ذات التحميل المنخفض جدًا) التي تعمل على نفس الجهاز.

Add Example

التعليق الأكثر فائدة

يجب أن أوافق مع jbergstroem على أن هذا لا ينتمي إلى جوهر. لكنني تقدمت وأضفت مثالاً يوضح كيف يمكنك إنجاز ذلك باستخدام المسارات:

http://github.com/benoitc/gunicorn/blob/master/examples/multiapp.py

ال 7 كومينتر

أعتقد أن أفضل حل لهذا النوع من السلوك هو من قبل المستخدم النهائي. هناك اختلاف واضح في طريقة عمل Gunicorn مع "مواقع متعددة" مقارنة بخادم الويب التقليدي.
أود أن أقترح استخدام بعض مكتبات python البسيطة مثل werkzeug وجعل التطبيقين لديك يستجيبان على طرق مختلفة.

يجب أن أوافق مع jbergstroem على أن هذا لا ينتمي إلى جوهر. لكنني تقدمت وأضفت مثالاً يوضح كيف يمكنك إنجاز ذلك باستخدام المسارات:

http://github.com/benoitc/gunicorn/blob/master/examples/multiapp.py

بدلاً من اكتساب نقطة تثبيت محددة لكل تطبيق ، هل سيكون من الممكن الحصول على مثال مع مضيف افتراضي بالاسم؟

نعم ، هذا ممكن تمامًا. يمكنك كتابة تخطيط تافه للبيئة ['HTTP_HOST'] للتطبيقات.

أعتقد أن هذا يمكن بناؤه في gunicorn ، ما رأيك؟

قد يكون هذا جزءًا اختياريًا من gunicorn ، مثل المساهمات ، نعم.

أعتقد أنه سيكون من الأفضل كتطبيق متعدد الإرسال مستقل بتكوين منفصل. يجب أن يذهب تخصص Django / Paste أيضًا إلى هناك. مثله:

$ gunicorn wsgi_multi django:project1 myblog.wsgi:wsgi_app anotherapp.foo

هنا ، يدير gunicorn تطبيقًا واحدًا فقط wsgi_multi ، ويتم تمرير الوسائط الأخرى إليه عبر بعض واجهة برمجة التطبيقات الخاصة. أو عن طريق التكوين أو بطريقة أخرى.

قضيت الكثير من الوقت في محاولة كتابة شيء مثل ما هو مقترح في هذه التذكرة. أولاً حاولت الحصول على رمز يقوم بتبديل virtualenv بناءً على HTTP_HOST. تبين أنه لا يمكنك حقًا إلغاء تنشيط Virtualenvs في لغة python الخالصة ، لذلك كان هذا بمثابة غسل.

ثم فكرت: ربما يمكننا فقط أن يكون لدينا شرط أن يكون تطبيق Virtualenv واحدًا ، لذلك قمت بكتابة الكود للتبديل إلى تطبيقات WSGI مختلفة استنادًا إلى HTTP_HOST فقط لاكتشاف أنه لا يمكنك تشغيل تطبيقين من django جنبًا إلى جنب لأن django يحتفظ بـ عدد مذهل حقًا من المتغيرات العالمية في كل مكان.

إذن ، ما أقوله هو أنه ليس سهلاً أو حتى ممكنًا كما هو مقترح أعلاه.

ربما يكون أكثر جدوى من القيام بنوع من موازنة الحمل حيث يعمل العمال في بيئة افتراضية مختلفة اعتمادًا على التطبيق ويتأكد خبير gunicorn المركزي من أن التطبيقات التي تحتاج إلى المزيد من العمال تحصل عليها؟ ربما ليس من السهل أو الممتع الكتابة :(

أرغب حقًا في تنظيف django لجعل هذا النوع من الأشياء ممكنًا ...

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات