Могу ли я сделать Django "безопасным для зеленых"?

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

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

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

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

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

1 ответ

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

Другие вопросы по тегам