在Python中使用多线程写入SQLite
我有一个sqlite3数据库,想要从多个线程写入数据。我有几个想法,但不确定该用哪个。
- 创建多个连接,检测数据库是否被锁定,如果被锁定就等待。
- 使用一个连接,尝试利用序列化连接(但在Python中似乎没有实现)。
- 有一个后台进程,使用一个连接,收集所有线程的查询,然后代表它们执行这些查询。
- 不考虑SQlite,直接使用像Postgresql这样的数据库。
这些不同方法的优缺点是什么?哪种方法最有可能成功?还有其他可能的选择吗?
2 个回答
0
试试这个链接:https://pypi.python.org/pypi/sqlitedict。它是一个轻量级的工具,可以让你更方便地使用Python的sqlite3数据库,使用起来就像操作字典一样,并且支持多线程访问。不过要注意,虽然它支持多线程,但内部的请求还是会排队处理,所以这种“多线程支持”并不会让你在性能上有明显的提升。这只是为了绕过sqlite在Python中的一些限制。
如果你需要同时处理多个连接,PostgreSQL、MySQL等数据库会表现得更好。
1
我之前用过方法一。这是编码中最简单的一种。因为那个项目是个小网站,每次查询只需要几毫秒。所有用户的请求都能很快处理。
我也用过方法三。因为当查询时间比较长时,把查询放到队列里处理会更好,因为频繁的“检测和等待”在这种情况下没有意义。这需要一个经典的生产者-消费者模型,这样编码会花更多时间。
不过如果查询真的很复杂而且频繁,我建议考虑其他数据库,比如MS SQL或MySQL。