【发布时间】:2020-10-07 22:14:46
【问题描述】:
虽然 ORM 通常对异步不友好,但也有异步 Web 框架。尽管在您的数据库与服务器托管在同一本地网络中以提供普通服务的典型场景中,是否有任何理由关心这一点?毕竟,与外部网络请求相比,网络 I/O 到数据库的等待时间可以忽略不计。
在我的具体情况下,我有一个 Python aiohttp Web 服务器,我想连接到一个 PostgreSQL 数据库。我很想使用 SQL Alchemy 作为 ORM 层,尽管这意味着阻塞请求,因为 SQL Alchemy ORM 层不支持异步数据库驱动程序(有替代品,例如 GINO 或 async-peewee,尽管它们不适合生产在我的情况下使用)。这个问题适用于任何可能愿意发出阻塞请求的异步 Web 服务器。
这在任何地方都没有真正讨论过。争论是你是否愿意放弃使用稳定但同步的 ORM 来使用异步 Web 服务器。考虑到数据库将与服务器位于同一网络中,我在这里监督是否有任何危害?
如果您使用的 ORM 可能会基于属性或方法访问对数据库隐式发出 SQL 查询,则可以生成线程来生成这些阻塞请求,尽管这在您的应用程序中更需要管理。
【问题讨论】:
标签: python async-await sqlalchemy blocking aiohttp