2012-08-17 13 views
7

Sto usando gunicorn per eseguire alcune applicazioni pallone e Django, utilizzando il lavoratore gevent, e alcune domande ...Quali caratteristiche sono rattoppate da gecorn gevent worker?

In primo luogo, suppongo che a causa gunicorn forchetta e istanziare i miei processi, sarà scimmia rattoppare i moduli standard e non devo chiamare me stesso monkey.patch_all, è già fatto per me, e ogni richiesta funziona come una greenlet, è corretto?

In secondo luogo, e questa è la parte importante, in cui le produzioni sono state davvero rattoppate da gunicorn-gevent? quando usi gevent, puoi sempre scegliere quale funzione applicare (socket, patch, urllib) ... Quindi, la domanda è: quale di queste caratteristiche sono davvero state modificate con la scimmia bu gunicorn-gevent? Come posso modificare questo elenco?

Ad esempio, la chiamata standard a monkey.patch_all() non applica urllib? Come potrei sapere se è stato riparato o no? e come forzare gunicorn-gevent a ripararlo?

Grazie

Joe

risposta

5

sembra che il lavoratore gevent chiama monkey.patch_all() quando viene inizializzato.

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

È comunque possibile chiamare il proprio codice di inizializzazione all'avvio del app.

Con il pallone uso il paster gunicorn.

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 nel pacchetto:

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

esempio 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 

Ora è possibile eseguirlo:

gunicorn_paster my_app.ini 
+0

Ciao, grazie per il suggerimento, chiama patch_all() che di default non applica urllib, quindi come posso correggerlo durante l'inizializzazione? e c'è un modo per determinare cosa viene patchato e cosa no? grazie – Joseph

+0

Non proprio, ma la successiva patch della scimmia è ok. – gwik

+0

ok, qualche domanda fuori tema: perché gunicorn paster? quali sono i suoi benefici? grazie – Joseph

1

Ho risposto a una domanda simile e questo potrebbe risolvere i vostri problemi.
Fare riferimento a questa domanda: Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

In primo luogo, il gunicorn utilizzare SyncWorkers come predefinita e se non si modifica la configurazione, il server non userà greenlets. E anche se scarichi tutte le patch, penso che non abbia molto aiuto perché gunicorn gestisce una richiesta alla volta come default.

In secondo luogo, dare un'occhiata al codice sorgente di GeventWorker e in realtà la patch scimmia tutto.

Problemi correlati