我有一个使用“线程”模块的Python 程序。每秒,我的程序都会启动一个新线程,从网络上获取一些数据,并将这些数据存储到我的硬盘上。我想使用 sqlite3 来存储这些结果,但我无法让它工作。问题似乎与以下行有关:
conn = sqlite3.connect("mydatabase.db")
- 如果我将这行代码放入每个线程中,我会收到一个操作错误,告诉我数据库文件已锁定。我想这意味着另一个线程通过 sqlite3 连接打开了 mydatabase.db 并锁定了它。
- 如果我将这行代码放在主程序中并将连接对象 (conn) 传递给每个线程,我会收到一个编程错误,指出在线程中创建的 SQLite 对象只能在同一线程中使用。
以前,我将所有结果存储在 CSV 文件中,并且没有任何这些文件锁定问题。希望这可以通过 sqlite 实现。有任何想法吗?
与流行的看法相反,较新版本的 sqlite3do支持多线程访问。
这可以通过可选的关键字参数启用check_same_thread
:
sqlite.connect(":memory:", check_same_thread=False)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)