【问题标题】:Writing in SQLite multiple Threads in Python用 Python 编写 SQLite 多线程
【发布时间】:2023-03-31 19:45:02
【问题描述】:
我有一个 sqlite3 数据库,我想从多个线程中写入。我有多个想法,但我不确定应该实施哪个。
- 创建多个连接,检测数据库是否被锁定并放弃
- 使用一个连接并尝试使用序列化连接(python 中似乎没有实现)
- 有一个带有单个连接的后台进程,它收集来自所有线程的查询,然后代表它们执行它们
- 忘记 SQlite 并使用 Postgresql 之类的东西
这些不同方法的进步是什么,哪些最有可能取得成果?还有其他可能吗?
【问题讨论】:
标签:
python
multithreading
postgresql
sqlite
【解决方案1】:
尝试使用https://pypi.python.org/pypi/sqlitedict
一个围绕 Python 的 sqlite3 数据库的轻量级包装器,具有类 dict 接口和多线程访问支持。
但请考虑“并发请求仍在内部序列化,因此这种“多线程支持”不会给您带来任何性能优势。它是 Python 中 sqlite 限制的一种解决方法。”
PostgreSQL、MySQL 等为您一次连接多个连接提供更好的性能
【解决方案2】:
我之前用过方法一。它是最简单的编码。由于该项目有一个小型网站,因此每次查询只需几毫秒。所有用户的请求都可以得到及时处理。
我之前也用过方法3。因为当查询需要更长的时间时,最好将查询排队,因为频繁的“检测和等待”在这里没有意义。并且需要一个经典的消费者-生产者模型。编码需要更多时间。
但是如果查询真的很重且频繁。我建议查看其他数据库,例如 MS SQL/MySQL。