首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多线程模式下,aiosqlite和SQLite有什么区别?

在多线程模式下,aiosqlite和SQLite有什么区别?
EN

Stack Overflow用户
提问于 2020-09-09 14:35:46
回答 1查看 2.6K关注 0票数 9

我正在尝试异步处理多个文件,处理每个文件需要对SQLite数据库进行一些读写。我一直在研究一些选项,并找到了aiosqlit模块这里。然而,我正在阅读SQLite文档这里,它说它支持多线程模式。事实上,默认模式是“序列化”的,这意味着“可以安全地由多个线程使用,不受任何限制”。

我不明白这有什么区别。aiosqlite的文件说:

在等待查询或数据获取时,aiosqlite允许在主SQLite事件循环中与AsyncIO数据库进行交互,而无需阻止其他协同器的执行。它通过每个连接使用一个共享线程来实现这一点。

我了解到在sqlite上,aiosqlite和“多线程”模式有区别,因为多线程模式每个线程只需要一个连接,而在aiosqlite中,您可以跨多个线程重用这个单一连接。但是,这不是与序列化模式相同吗?在序列化模式中,它可以“由多个线程不受限制地使用”?

编辑:我现在的问题是“我现在的理解是正确的吗?”:

  1. Sqlite在“序列化”模式下可以一次由多个线程使用,所以如果我在python中使用threading模块并生成多个线程,这将被使用。在这里,我有两个选项,要么使用每个线程单独的连接,要么跨多个线程共享连接。
  2. aiosqlite与异步一起使用。因此,由于异步具有多个共享一个线程的协同,所以aiosqlite也可以使用一个线程。因此,我创建了一个连接,我在所有的协同工作中共享。
  3. 因为aiosqlite基本上是sqlite的包装器,所以我可以将1和2的功能结合起来,所以我可以有多个线程,其中每个线程都有一个包含多个协同值的异步事件循环。因此,基本的sqlite功能将处理多线程,而aiosqlite将处理协同。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-17 11:04:27

首先,关于线程:

斯奎特..。可同时由多个线程使用。

由于吉尔的存在,线程始终是并发运行的(而不是并行的)。你唯一不知道什么时候线程会被中断的GIL。但是异步允许您“手动”切换线程和等待某些IO操作(如数据库通信)。

让我解释一下不同模式之间的差异:

  • 单线程-创建单个数据库连接,无需任何互斥或任何其他机制来防止多线程问题。
  • 多线程--用互斥创建单个共享数据库连接,为每个操作/与数据库的通信锁定该连接。
  • 序列化-每个线程创建多个数据库连接。

在更新中回答问题:

  1. 是 在“序列化”模式下的Sqlite可以一次由多个线程使用,所以如果我在python中使用线程模块并生成多个线程,这将被使用。在这里,我有两个选项,要么使用每个线程单独的连接,要么跨多个线程共享连接。
  2. 是的,它将分享他们之间的一个单一的联系。 aiosqlite与异步一起使用。因此,由于异步具有多个共享一个线程的协同,所以aiosqlite也可以使用一个线程。因此,我创建了一个连接,我在所有的协同工作中共享
  3. 是。 因为aiosqlite基本上是sqlite的包装器,所以我可以将1和2的功能结合起来,所以我可以有多个线程,其中每个线程都有一个包含多个协同值的异步事件循环。因此,基本的sqlite功能将处理多线程,而aiosqlite将处理协同。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63813922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档