Могу ли я сделать Django «безопасным для зеленых»? - PullRequest
6 голосов
/ 08 марта 2011

Большая картина: Я хочу использовать eventlet в некоторых приложениях, которые выполняют асинхронный ввод-вывод при внешней работе с моделями Django. Внешне работать с Django просто (см. Django: как я могу использовать классы моей модели для взаимодействия с моей базой данных вне Django? ), но это не главная проблема.

Я предполагаю (я не проверял), что использование Django из greenlets опасно. На самом деле, в случае psycopg2 у нас есть это предупреждение (см. http://www.initd.org/psycopg/docs/advanced.html#support-to-coroutine-libraries):

Соединения Psycopg не зеленые потокобезопасен и не может быть использован одновременно другой зеленый нити

В Django есть одно соединение дБ на поток (верно?), И, как таковое, оно может привести к страшным сценариям при использовании. Можно ли как-то вручную предоставить объект подключения? Или сделать его "локальным по гринлету"?

Моя мотивация - использовать пул соединений из eventlet (http://eventlet.net/doc/modules/db_pool.html), чтобы я мог ускорить работу приложения, связанного с IO.

1 Ответ

7 голосов
/ 08 марта 2011

Есть несколько проектов, чтобы Django хорошо работал с greenlet.Я бы проверил psycogreen , который использует поддержку сопрограмм в Psycopg> = 2.2.Есть хороший пост в блоге об использовании gevent, gunicorn и psycogreen вместе с Django: http://dbinit.com/blog/going-green/.

...