用Python编写SQLite多线程

时间:2014-09-09 14:28:03

标签: python multithreading postgresql sqlite

我有一个sqlite3数据库,我想从多个线程写入它。我有多个想法,但我不确定应该实施哪些。

  1. 创建多个连接,检测并判断数据库是否已锁定
  2. 使用一个连接并尝试使用序列化连接(似乎不能在python中实现)
  3. 有一个单一连接的后台进程,它从所有线程收集查询,然后在其行为上执行它们
  4. 忘记SQlite并使用像Postgresql
  5. 之类的东西

    这些不同方法有哪些进展,最有可能取得丰硕成果?还有其他可能性吗?

2 个答案:

答案 0 :(得分:0)

尝试使用https://pypi.python.org/pypi/sqlitedict 围绕Python的sqlite3数据库的轻量级包装器,具有类似dict的接口和多线程访问支持。 但考虑到“并发请求仍在内部序列化,因此这种”多线程支持“并没有给您带来任何性能优势。它是Python中sqlite限制的解决方法。”

PostgreSQL,MySQL等可以一次性为多个连接提供更好的性能

答案 1 :(得分:0)

之前我使用过方法1。它是最简单的编码方式。由于该项目有一个小网站,每个查询只需几毫秒。可以及时处理所有用户请求。

之前我也使用过方法3。因为当查询需要更长的时间时,最好对查询进行排队,因为频繁"检测并等待"这里毫无意义。并且需要一个经典的消费者 - 生产者模型。这需要更多时间来编码。

但是如果查询真的很重且经常发生。我建议看看像MS SQL / MySQL这样的其他数据库。