我正在尝试异步处理多个文件,处理每个文件需要对SQLite数据库进行一些读写。我一直在研究一些选项,并找到了aiosqlit模块这里。然而,我正在阅读SQLite文档这里,它说它支持多线程模式。事实上,默认模式是“序列化”的,这意味着“可以安全地由多个线程使用,不受任何限制”。
我不明白这有什么区别。aiosqlite的文件说:
在等待查询或数据获取时,aiosqlite允许在主SQLite事件循环中与AsyncIO数据库进行交互,而无需阻止其他协同器的执行。它通过每个连接使用一个共享线程来实现这一点。
我了解到在sqlite上,aiosqlite和“多线程”模式有区别,因为多线程模式每个线程只需要一个连接,而在aiosqlite中,您可以跨多个线程重用这个单一连接。但是,这不是与序列化模式相同吗?在序列化模式中,它可以“由多个线程不受限制地使用”?
编辑:我现在的问题是“我现在的理解是正确的吗?”:
threading模块并生成多个线程,这将被使用。在这里,我有两个选项,要么使用每个线程单独的连接,要么跨多个线程共享连接。发布于 2020-09-17 11:04:27
首先,关于线程:
斯奎特..。可同时由多个线程使用。
由于吉尔的存在,线程始终是并发运行的(而不是并行的)。你唯一不知道什么时候线程会被中断的GIL。但是异步允许您“手动”切换线程和等待某些IO操作(如数据库通信)。
让我解释一下不同模式之间的差异:
在更新中回答问题:
https://stackoverflow.com/questions/63813922
复制相似问题