Заставить Джанго стать зеленым - PullRequest
10 голосов
/ 14 февраля 2012

У меня есть команда управления Django, которая делает тысячи запросов TCP / UDP. Я использовал Gevent, чтобы ускорить это, поскольку я реструктурировал свой код для работы в качестве сопрограмм. Соединения с сокетами больше не блокируются, но из того, что я прочитал, части Django все еще не зеленые. (Под зеленым я подразумеваю использование гринлетов.)

Не могли бы вы сказать, какие части Джанго не зеленые и что я могу сделать, чтобы они стали зелеными? Я думаю, что есть некоторые части, связанные с БД. Есть ли какие-нибудь библиотеки / патчи для Django, которые помогают мне сделать его зеленым?

Меня не слишком беспокоит то, что цикл запроса / ответа будет зеленым или нет, поэтому Gunicorn поможет мне?

Спасибо

Ответы [ 2 ]

10 голосов
/ 16 февраля 2012

Патч Gevent Monkey будет исправлять стандартную библиотеку, чтобы быть дружественным к Гринлету. Это должно занять много общих вызовов Django.

from gevent import monkey; monkey.patch_all()

Что касается баз данных, обычно интерфейсы блокируются. Если вы используете PostgreSQL, загляните в psyco_gevent , чтобы установить патч psycopg2 для сотрудничества с gevent.

2 голосов
/ 01 марта 2012

gevent не будет выделять сторонние библиотеки, если они используют либо расширения C, либо другие сторонние библиотеки, использующие расширения C.Если используются стандартные библиотеки, то Gevent может их исправить.

Некоторые драйверы баз данных, конечно, зависят от самой реализации базы данных.То, что вы используете зеленую библиотеку, не означает, что ваша база данных будет вести себя «зеленой».Это также необходимо вызывать на уровне самой базы данных.Prosgresql, например, поддерживает обработку асинхронных команд начиная с версии 2.2.

Также вы можете проверить Проекты, использующие gevent .

Gunicorn облегчит вам жизнь, по крайней мерекогда вы начинаете развертывать свое приложение.Также во время разработки я бы порекомендовал gunicorn (с gevent) вместо обычной команды django runserver, просто потому, что она может обрабатывать одновременные запросы намного быстрее.

...