1 回答

TA贡献1779条经验 获得超6个赞
首先关于线程:
Sqlite ...可以同时被多个线程使用
由于GIL的原因,它仍然不会同时运行,线程总是并发运行(不是并行)。使用 GIL 唯一的问题是你不知道线程何时会被中断。但是 asyncio 允许您“手动”在线程之间切换并等待某些 IO 操作(例如数据库通信)。
让我解释一下不同模式之间的区别:
单线程- 创建单个数据库连接,无需任何互斥体或任何其他机制来防止多线程问题。
多线程- 使用互斥锁创建单个共享数据库连接,互斥锁为每个与数据库的操作/通信锁定该连接。
序列化- 每个线程创建多个数据库连接。
回答更新中的问题:
是的
“序列化”模式下的 Sqlite 可以同时被多个线程使用,因此如果我在 python 中使用线程模块并生成多个线程,则会使用此功能。在这里,我可以选择每个线程使用单独的连接或跨多个线程共享连接。
是的,它将在它们之间共享一个连接。
aiosqlite 与 asyncio 一起使用。因此,由于 asyncio 有多个共享一个线程的协程,aiosqlite 也可以使用一个线程。所以我创建了一个在所有协程之间共享的连接
是的。
由于 aiosqlite 基本上是 sqlite 的包装器,因此我可以结合 1 和 2 的功能。因此我可以拥有多个线程,其中每个线程都有一个带有多个协程的 asyncio 事件循环。因此,基本的 sqlite 功能将处理多线程,而 aiosqlite 将处理协程。
添加回答
举报