我正在尝试异步处理多个文件,并且处理每个文件需要对 SQLite 数据库进行一些读取和写入。我一直在寻找一些选项,并找到了 aiosqlite 模块。但是,我在阅读了 SQLite 文档,它说它支持多线程模式。事实上,默认模式是“序列化”,这意味着它“可以不受限制地被多个线程安全地使用”。
我不明白有什么区别。aiosqlite 文档说:
aiosqlite 允许在主 AsyncIO 事件循环上与 SQLite 数据库进行交互,而不会在等待查询或数据获取时阻止其他协程的执行。它通过每个连接使用一个共享线程来实现这一点。
我知道 aiosqlite 和 sqlite 上的“多线程”模式之间存在差异,因为多线程模式每个线程只需要一个连接,而在 aiosqlite 中,您可以跨多个线程重用此单个连接。但这不是和序列化模式一样“可以不受限制地被多个线程使用”吗?
编辑:我现在的问题是“我目前的理解是否正确?”:
“序列化”模式下的 Sqlite 可以同时被多个线程使用,因此如果我threading
在 python 中使用该模块并生成多个线程,则会使用此模式。在这里,我可以选择每个线程使用单独的连接或跨多个线程共享连接。
aiosqlite 与 asyncio 一起使用。因此,由于 asyncio 有多个共享一个线程的协程,aiosqlite 也可以使用一个线程。因此,我创建了一个在所有协程之间共享的连接。
由于 aiosqlite 基本上是 sqlite 的包装器,因此我可以结合 1 和 2 的功能。因此我可以拥有多个线程,其中每个线程都有一个带有多个协程的 asyncio 事件循环。因此,基本的 sqlite 功能将处理多线程,而 aiosqlite 将处理协程。
哆啦的时光机
相关分类