小编典典

Python sqlite3和并发

python

我有一个使用“线程”模块的Python程序。每秒一次,我的程序启动一个新线程,该线程从Web上获取一些数据,并将这些数据存储到我的硬盘中。我想使用sqlite3来存储这些结果,但是我无法使其正常工作。问题似乎与以下几行有关:

conn = sqlite3.connect("mydatabase.db")
  • 如果将这行代码放入每个线程中,则会收到OperationalError通知我数据库文件已锁定。我猜这意味着另一个线程通过sqlite3连接打开了mydatabase.db并已将其锁定。
  • 如果将这行代码放入主程序中,并将连接对象(conn)传递给每个线程,则会收到一个ProgrammingError,表示在线程中创建的SQLite对象只能在同一线程中使用。

以前,我将所有结果存储在CSV文件中,并且没有任何这些文件锁定问题。希望使用sqlite可以实现。有任何想法吗?


阅读 211

收藏
2020-12-20

共1个答案

小编典典

您可以使用消费者-
生产者模式。例如,您可以创建线程之间共享的队列。从Web上获取数据的第一个线程将该数据排队在共享队列中。拥有数据库连接的另一个线程使队列中的数据出队,并将其传递给数据库。

2020-12-20