2012-02-14 15 views
10

Mam polecenie zarządzania Django, które wykonuje tysiące żądań TCP/UDP. Użyłem Gevent, aby przyspieszyć ten proces, ponieważ zrestrukturyzowałem swój kod, by działał jako coroutines. Połączenia gniazd nie blokują się, ale z tego, co przeczytałem, części Django nadal nie są zielone. (Przez zielony, mam na myśli używanie greenletów.)Tworzenie Django na zielono

Czy możesz mi powiedzieć, jakie części Django nie są zielone i co mogę zrobić, aby były zielone? Jest kilka części związanych z DB, które wciąż blokują. Czy są jakieś biblioteki/łatki dla Django, które pomagają mi uczynić je zielonymi?

Nie przejmuję się tym, że cykl żądania/odpowiedzi jest zielony, czy też nie, czy Gunicorn mi pomoże?

Dzięki

Odpowiedz

10

gevent małpa patcher będzie załatać biblioteki standardowej należy Greenlet obsłudze. To powinno zabrać wiele popularnych wywołań Django.

from gevent import monkey; monkey.patch_all() 

Jeśli chodzi o bazy danych, zwykle interfejsy się blokują. Jeśli użyjesz PostgreSQL look do psyco_gevent do patch małpa psycopg2 do współpracy z gevent.

2

gevent nie będzie zielonymi bibliotekami stron trzecich, jeśli będą używane rozszerzenia C lub inne biblioteki stron trzecich korzystające z rozszerzeń języka C. Jeśli używane są standardowe biblioteki, gevent może je łatać.

Niektóre sterowniki baz danych polegają oczywiście na samej implementacji bazy danych. Tylko dlatego, że używasz zielonej biblioteki, nie oznacza, że ​​baza danych będzie się zachowywać "na zielono". Trzeba to również wywołać na samym poziomie bazy danych. Prosgresql na przykład obsługuje przetwarzanie poleceń asynchronicznych od wersji 2.2.

Również możesz chcieć sprawdzić Projects using gevent.

Gunicorn ułatwi Ci życie, przynajmniej gdy zaczniesz wdrażać aplikację. Również w trakcie rozwoju polecam gunicorn (z gevent) ponad normalną komendą runserver django, po prostu dlatego, że potrafi obsłużyć jednoczesne żądania szybciej.

Powiązane problemy