Python asyncio 如何使用协同程序处理postgres数据库

Python asyncio 如何使用协同程序处理postgres数据库,python-asyncio,psycopg2,aiopg,Python Asyncio,Psycopg2,Aiopg,我们正在利用asyncio框架(在我们的例子中是aiohttp)构建一个后端服务 我们使用aiopg对数据库进行查询 由于这是一个线程服务器,进行数据库查询的正确实现模式是什么: 1) 服务器应该只保留一个连接,每个协同程序应该只在该连接对象上创建一个新的游标 或 2) 服务器应该为每个协同路由打开一个新连接吗 关于场景(1)的问题:它能保证并发性吗?数据库能否在一个连接上运行多个异步查询wait cursor.execute()?我非常确定,在非异步模式下,相同连接上的游标只需序列化即可。这在

我们正在利用asyncio框架(在我们的例子中是aiohttp)构建一个后端服务

我们使用aiopg对数据库进行查询

由于这是一个线程服务器,进行数据库查询的正确实现模式是什么:

1) 服务器应该只保留一个连接,每个协同程序应该只在该连接对象上创建一个新的游标

2) 服务器应该为每个协同路由打开一个新连接吗

关于场景(1)的问题:它能保证并发性吗?数据库能否在一个连接上运行多个异步查询
wait cursor.execute()
?我非常确定,在非异步模式下,相同连接上的游标只需序列化即可。这在使用异步时是否有所不同?如果是,可以同时获取的游标的最大限制是多少


关于场景(2)的问题:对于单线程异步IO服务器来说,这是一个有效的场景吗

在不了解应用程序架构的情况下,提供特定帮助有点困难,但您可能希望使用连接池。包括一个使用池的示例。我正在使用conn池。问题很简单:当有多个并发用户(多个协同程序同时向数据库查询)时,每个协同程序是打开一个新连接还是只打开共享连接中的新游标?如果您使用的是池,则所有连接都已共享,因此,得到一个新的或重复使用一个旧的实际上是同一件事。