2012-08-17 5 views
7

Używam gunicorn przeprowadzić kilka kolby i django aplikacji, używając pracownika gevent i kilka pytań ...Jakie funkcje ma małpa załatana przez robotnicę gunicorn?

Po pierwsze, zakładam, że z powodu gunicorn widelec i wystąpienia moich procesów, to będzie małpa załatać standardowe moduły i nie muszę sam wywoływać monkey.patch_all, to już jest zrobione dla mnie, a każde żądanie działa jako greenlet, czy to prawda?

Po drugie, i to jest ważna część, która ma naprawdę łatane małpy przez gunicorn-gevent? kiedy używasz gevent, zawsze możesz wybrać, która z funkcji ma być łatana (gniazdo, łatka, urllib) ... Tak więc, pytanie brzmi: Które z tych opisów są naprawione małymi łatami bu gunicorn-gevent? Jak mogę zmienić tę listę?

Na przykład standardowe wywołanie metody monkey.patch_all() nie powoduje poprawienia adresu urllib? Skąd mogłem wiedzieć, czy został załatany, czy nie? i jak zmusić gunicorn-gevent, by to załatał?

Dzięki

Joe

Odpowiedz

5

Wygląda na to, że pracownik gevent wzywa monkey.patch_all(), gdy jest on zainicjowany.

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

Nadal można nazwać swój własny kod inicjalizacji Podczas uruchamiania aplikacji.

Z kolbą używam pasterka 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 w opakowaniu:

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

przykład 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 

Teraz można go uruchomić:

gunicorn_paster my_app.ini 
+0

Witam, dziękuję za podpowiedź, to wywołuje metodę patch_all(), która domyślnie nie łata urllib, więc jak mogę ją załatwić podczas inicjalizacji? i czy istnieje sposób na ustalenie, co jest załatane, a co nie? dzięki – Joseph

+0

Nie bardzo, ale kolejne łatanie małpy jest w porządku. – gwik

+0

OK, pewne nietypowe pytanie: dlaczego gasterorn paster? jakie są korzyści? dzięki – Joseph

1

Odpowiedziałem na proste pytanie, które może rozwiązać twoje problemy.
Patrz na to pytanie: Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

pierwsze, gunicorn używać SyncWorkers domyślnie i jeśli nie zmieniają konfiguracji, serwer nie będzie wykorzystywać greenlets. I mimo że małpa łata wszystko, myślę, że nie ma to wielkiej pomocy, ponieważ gunicorn obsługuje domyślnie jedną prośbę naraz.

Po drugie, spójrz na kod źródłowy GeventWorker i właściwie małpa załataj wszystko.

Powiązane problemy