2012-08-17 5 views
7

ich gunicorn bin mit ein paar Kolben und django-Anwendungen ausführen, GEVENT Arbeiter verwenden und einige Fragen haben ...Welche Features sind Affe geflickt von Gunicorn gevent Arbeiter?

Zunächst Ich gehe davon aus, dass, weil gunicorn Gabel und meine Prozesse instanziiert, wird es Affen die Standardmodule Patch und ich muss nicht selbst monkey.patch_all aufrufen, es ist schon fertig für mich, und jede Anfrage läuft wie ein Greenlet, stimmt das?

Zweitens, und das ist der wichtige Teil, der featues wirklich Affe geflickt von Gunicorn-gevent bekommen? Wenn Sie gevent verwenden, können Sie immer wählen, welche Funktion (Socket, Patch, urllib) gepatcht werden soll ... Also, die Frage ist, welche von diesen sind wirklich Affen gepatcht bu Gunicorn-gevent? Wie kann ich diese Liste ändern?

Zum Beispiel, der Standardaufruf zu monkey.patch_all() Patch urllib? Wie könnte ich wissen, ob es gepatcht wurde oder nicht? und wie man Gunicorn-gevent dazu zwingt, es zu patchen?

Dank

Joe

Antwort

5

Sieht aus wie GEVENT Arbeiter monkey.patch_all() aufruft, wenn es initialisiert wird.

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

Sie können Ihren eigenen Code für die Initialisierung, wenn Ihre App Stiefel noch rufen.

Mit Kolben verwende ich Gunicorn Paster.

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 in Ihrem Paket:

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

Beispiel 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 

Jetzt können Sie es laufen:

gunicorn_paster my_app.ini 
+0

Hallo, danke für den Tipp, es ruft patch_all(), die standardmäßig nicht urllib Patch, also wie kann ich es bei der Initialisierung Patch? und gibt es einen Weg zu bestimmen, was gepatcht ist und was nicht? Danke – Joseph

+0

Nicht wirklich, aber das anschließende Affepatching ist in Ordnung. – gwik

+0

ok, einige off-topic frage: warum gunicorn paster? Was sind seine Vorteile? Danke, – Joseph

1

Ich habe eine ähnliche Frage beantwortet, und das könnte Ihre Probleme lösen.
auf diese Frage finden: Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

Zuerst wird die gunicorn verwenden SyncWorkers als Standard und wenn Sie nicht die Konfiguration ändern, dann wird der Server nicht greenlets verwenden. Und obwohl Sie alle Affen patchten, denke ich, dass es nicht viel hilft, weil Gunicorn eine Anfrage nach der anderen standardmäßig bearbeitet.

Zweitens, werfen Sie einen Blick auf den Quellcode von GeventWorker und es tatsächlich Affen Patch alle.