2012-08-17 8 views
7

estoy usando gunicorn para ejecutar algunas aplicaciones matraz y Django, utilizando el trabajador GEvent, y tengo algunas preguntas ...¿Qué funciones son parcheadas por un gentil trabajador de Gunicorn?

En primer lugar, supongo que debido tenedor gunicorn e instanciar mis procesos, será mono parchear los módulos estándar , y no tengo que llamar a monkey.patch_all yo mismo, ya está hecho para mí, y cada solicitud se ejecuta como un greenlet, ¿es correcto?

En segundo lugar, y esta es la parte importante, ¿qué características realmente tienen parche de mono por gunicorn-gevent? cuando usas gevent, siempre puedes elegir qué característica aplicar (parche, parche, urllib) ... Entonces, la pregunta es, ¿Cuáles de estas características tienen parche de mono realmente armado-gevent? ¿Cómo puedo cambiar esta lista?

Por ejemplo, la llamada estándar a monkey.patch_all() no parchea urllib? ¿Cómo podría saber si estaba parchado o no? y cómo obligar a Gunicorn-gevent a parchearlo?

Gracias

Joe

Respuesta

5

parece que el trabajador GEvent llama monkey.patch_all() cuando se inicializa.

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

Todavía se puede llamar a su propio código de inicialización cuando se inicie la aplicación.

Con el matraz utilizo el pasador de gunicornio.

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 en el paquete:

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

ejemplo 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 

Ahora se puede ejecutar:

gunicorn_paster my_app.ini 
+0

Hola, gracias por la sugerencia, llama a patch_all() que de forma predeterminada no aplica parche a urllib, entonces, ¿cómo puedo parchearlo en la inicialización? y hay una manera de determinar qué está parchado y qué no? gracias – Joseph

+0

En realidad no, pero el posterior parche mono está bien. – gwik

+0

bien, alguna pregunta fuera del tema: ¿por qué gunter paster? ¿Cuáles son sus beneficios? gracias – Joseph

1

He respondido una pregunta similar y eso puede resolver sus problemas.
se refieren a esta pregunta: Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

primer lugar, el uso de gunicorn SyncWorkers como predeterminado y si no se cambia la configuración, el servidor no utilizará Verdecillo. Y a pesar de que monos parche todo, creo que no tiene mucha ayuda porque gunicornio maneja una solicitud a la vez por defecto.

En segundo lugar, eche un vistazo al código fuente de GeventWorker y en realidad es un parche de mono.

Cuestiones relacionadas