لماذا جيفنت على التطبيق قارورة مع أباتشي + مود_وسجي يثير نوتيمبليمنتيدرور?
سؤال
أواجه مشكلة نشر بلدي قارورة التطبيق مع أباتشي (مود_وسجي) و جيفنت على استضافة مشتركة (ويباكتيون).
التطبيق يعمل بشكل جيد في خادم التنمية التي تقدمها قارورة ، ولكن عندما كنت حاول نشره أحصل على الخطأ التالي في ملف السجل:
[Tue Mar 13 15:48:24 2012] [error] Traceback (most recent call last):
[Tue Mar 13 15:48:24 2012] [error] File "evdns.pxi", line 78, in gevent.core.__evdns_callback (gevent/core.c:6300)
[Tue Mar 13 15:48:24 2012] [error] File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 297, in switch_args
[Tue Mar 13 15:48:24 2012] [error] File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 290, in switch
[Tue Mar 13 15:48:24 2012] [error] File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 135, in get_hub
[Tue Mar 13 15:48:24 2012] [error] NotImplementedError: gevent is only usable from a single thread
أحتاج جيفنت لأنني باستخدام وحدة مزامنة طلبات بايثون إلى تقديم طلبات هتب المتزامنة.حاولت أن جوجل حولها ولكن النصيحة الوحيدة التي وجدت هي للاتصال
from gevent import monkey
monkey.patch_all()
شيء أفعله بالفعل في الكود الخاص بي.
قيمة WSGIDaemonProcess
هو:
WSGIDaemonProcess myapp processes=5 python-path=/home/myusername/webapps/myapp/lib/python2.7 threads=1
هنا هو هتبد بلدي.أسيوط: http://pastebin.com/eWygicJH
أي شخص لديه أي نصيحة لحل هذه المشكلة?
المحلول
يبدو أنني وجدت الحل بنفسي.التوجيه التالي حل مشكلاتي:
giveacodicetagpre.الفكرة تأتي من آخر الإجابة حيث يقترح تعيين WSGiaPplicationGroup إلى Global لحل مشكلة مع عملية WSGIالتي تستمر في الانهيار. من وثائق WSGI :
لإجبار تطبيق WSGI معين يتم تشغيله خلال الأول مفسر بايثون الفرعي الذي تم إنشاؤه عندما يتم تهيئة بيثون، يجب استخدام توجيه WSGIAPPlicationGroup ومجموعة المجموعة '٪ {global}'.
لا يمكن أن يفهم تماما سبب حل هذا التوجيه مشكلتي ولكنه يفعل ذلك.سأكون أكثر من سعيد إذا كان شخص ما قادرا على شرح هذا لي في اللغة الإنجليزية العادية؛ -)
نصائح أخرى
حاول استبدال monkey.patch_all()
مع monkey.patch_all(thread=False)
.إذا كان حقا وحدة خيوط التي تسبب المتاعب عندما مصححة ، وهذا يجب حلها. request
لا تستخدم خيوط.
قمت بنشر إجابة أدناه على https://serverfault.com/a/869625/355861
Apache mod_wsgi غير متوافق حاليا مع GEVENT.بالنسبة إلى الفاصوليا مرنة AWS مع Apache، استخدمت ASYNC_MODE="الخيوط" للقارورة ويعمل بشكل جيد.ملاحظة، الخيوط لديها أداء أقل من gevent. https:/flask-socketio.readtheedocs.io/a/a/ a>
giveacodicetagpre. giveacodicetagpre.