Заставить Джанго стать зеленым

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

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

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

Спасибо


person Mridang Agarwalla    schedule 14.02.2012    source источник


Ответы (2)


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

from gevent import monkey; monkey.patch_all()

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

person Stephen Diehl    schedule 16.02.2012

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

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

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

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

person Torsten Engelbrecht    schedule 01.03.2012