SQLAlchemy可以配置为非阻塞吗?

Mat*_*tty 29 python database asynchronous sqlalchemy nonblocking

我的印象是,通过SQLAlchemy进行的数据库调用将阻塞,并且不适用于除同步代码之外的任何其他内容.我是否正确(我希望我不是!)或者有没有办法将其配置为非阻塞?

zzz*_*eek 29

您可以使用gevent以非阻塞样式使用SQLA.这是一个使用psycopg2的例子,使用psycopg2的协程支持:

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

我也听说人们对pymysql使用相同的想法.由于pymysql是纯Python并使用套接字库,因此gevent将套接字库修补为异步.

  • @zzzeek您的挂起可能来自SQLAlchemy的默认池(QueuePool),使用非猴子修补的线程.根据https://groups.google.com/forum/#!msg/gevent/533wzrnL0Fs/ijL34u5prYIJ上的示例,应用gevent的猴子补丁或制作绿色版本的QueuePool.当我拥有它时,它修复了相同的行为. (3认同)

kuh*_*nza 6

看看Tornado,因为他们有一些整洁的非阻塞库,特别是tornado.gen.

我们将它与Momoko一起使用,这是一个用于Tornado的非阻塞psycopg包装器库.到目前为止一直很棒.也许唯一的缺点是你丢失了SQLAlchemy为你提供的所有模型对象.虽然表现不真实.