Подтвердить что ты не робот

Может ли SQLAlchemy быть настроен на неблокирование?

У меня создается впечатление, что запросы базы данных через SQLAlchemy будут блокироваться и не подходят для использования в чем-либо, кроме синхронного кода. Я прав (надеюсь, что нет!) Или есть способ настроить его как неблокирующийся?

4b9b3361

Ответ 1

Вы можете использовать SQLA в неблокирующем стиле, используя gevent. Вот пример использования psycopg2, используя поддержку psycopg2 coroutine:

https://bitbucket.org/zzzeek/green_sqla/

Я также слышал, что люди используют ту же идею с pymysql. Поскольку pymysql находится в чистом Python и использует библиотеку сокетов, gevent исправляет библиотеку сокетов как асинхронную.

Ответ 2

Посмотрите Tornado, поскольку у них есть некоторые аккуратные неблокирующие библиотеки, особенно tornado.gen.

Мы используем это вместе с Momoko, неблокирующую оболочку psycopg для Tornado. Это было здорово. Возможно, единственным недостатком является то, что вы теряете все объекты объектов модели, которые дает вам SQLAlchemy. Однако производительность нереально.

Ответ 3

Без помощи greenlet ответ отрицательный, в контексте asyncio.

Однако в asyncio можно использовать только часть SQLAlchemy. Пожалуйста, найдите пример в проекте GINO, где мы использовали только ядро ​​SQLAlchemy без ядра и полного контекста выполнения, чтобы сделать простой ORM в asyncio.