2012-08-17 10 views
7

मैं कुछ कुप्पी और Django अनुप्रयोगों को चलाने की gunicorn उपयोग कर रहा हूँ, gevent कार्यकर्ता का उपयोग कर, और कुछ सवाल हैं ...बंदूकें गेवन कार्यकर्ता द्वारा बंदरगाह कौन सी विशेषताएं हैं?

सबसे पहले, मुझे लगता है कि क्योंकि gunicorn कांटा और मेरे प्रक्रियाओं का दृष्टांत, यह बंदर मानक मॉड्यूल पैच जाएगा , और मुझे खुद को बंदर.patch_all को कॉल करने की ज़रूरत नहीं है, यह मेरे लिए पहले ही हो चुका है, और प्रत्येक अनुरोध हरितलेट के रूप में चल रहा है, क्या यह सही है?

दूसरा, और यह महत्वपूर्ण हिस्सा है, जो वास्तव में बंदूकें-ग्वेंट द्वारा चुने गए बंदर हैं? जब आप भूगर्भ का उपयोग करते हैं, तो आप हमेशा चुन सकते हैं कि कौन सी सुविधा पैच (सॉकेट, पैच, urllib) ... तो, सवाल यह है कि इनमें से कौन सा विशेष रूप से बंदर बंदूक ग्रीनिकॉर्न-गीवेंट को बंद कर दिया गया है? मैं इस सूची को कैसे बदल सकता हूं?

उदाहरण के लिए, monkey.patch_all() के लिए मानक कॉल urllib पैच नहीं करता है? मुझे कैसे पता चलेगा कि यह पैच किया गया था या नहीं? और गनकोर्न-गीवेंट को पैच करने के लिए कैसे मजबूर करें? gevent कार्यकर्ता monkey.patch_all() जब यह आरंभ नहीं हो जाता कॉल की तरह

धन्यवाद

जो

उत्तर

5

लग रहा है।

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/ggevent.py#L45

आप अभी भी अपने स्वयं के प्रवर्तन कोड अपने ऐप के जूते कॉल कर सकते हैं।

फ्लास्क के साथ मैं बंदूकधारी पास्टर का उपयोग करता हूं।

my_app.ini: अपने पैकेज में

[app:main] 
use = egg:mypackage#myapp 
# app config goes here 

[server:main] 
use = egg:gunicorn#main 
# you can put gunicorn config options here 

setup.py:

entry_points={ 
    'paste.app_factory': [ 
     'myapp = mypackage.module:app_factory' 
    ] 

उदाहरण mypackage/module.py:

def app_factory(global_config, **config): 
    # initialization code/gevent monkey patch goes here 
    # also you can assemble your wsgi stack. 
    # then return your flask app 
    return app 

अब आप इसे चला सकते हैं:

gunicorn_paster my_app.ini 
+0

हाय, टिप के लिए धन्यवाद, यह patch_all() को कॉल करता है जो डिफ़ॉल्ट रूप से urllib को पैच नहीं करता है, तो मैं इसे प्रारंभ में कैसे पैच कर सकता हूं? और यह निर्धारित करने का कोई तरीका है कि पैच क्या है और क्या नहीं है? धन्यवाद – Joseph

+0

वास्तव में नहीं बल्कि बाद में बंदर पैचिंग ठीक है। – gwik

+0

ठीक है, कुछ ऑफ-विषय प्रश्न: क्यों बंदूकधारी पास्टर? इसका क्या फायदा है? धन्यवाद – Joseph

1

मैंने एक समान प्रश्न का उत्तर दिया है और यह आपकी समस्याओं का समाधान कर सकता है। gunicorn डिफ़ॉल्ट के रूप में SyncWorkers का उपयोग करें और अगर आप विन्यास बदल नहीं है, तो सर्वर greenlets का उपयोग नहीं होगा, Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

पहले:
इस सवाल का संदर्भ लें। और भले ही आप बंदर पैच सभी को देखते हैं, मुझे लगता है कि इसमें बहुत मदद नहीं है क्योंकि बंदूकधारी एक समय में डिफ़ॉल्ट रूप से एक अनुरोध को संभालती है।

दूसरा, GeventWorker के स्रोत कोड पर एक नज़र डालें और यह वास्तव में बंदर पैच सभी को देखें।

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

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