相关疑难解决方法(0)

Python sqlite3和并发

我有一个使用"线程"模块的Python程序.每隔一秒,我的程序就会启动一个新的线程,从网络中获取一些数据,并将这些数据存储到我的硬盘中.我想使用sqlite3来存储这些结果,但我无法让它工作.问题似乎与以下几行有关:

conn = sqlite3.connect("mydatabase.db")
Run Code Online (Sandbox Code Playgroud)
  • 如果我将这行代码放在每个线程中,我会得到一个OperationalError,告诉我数据库文件已被锁定.我想这意味着另一个线程通过sqlite3连接打开了mydatabase.db并锁定了它.
  • 如果我将这行代码放在主程序中并将连接对象(conn)传递给每个线程,我会得到一个ProgrammingError,说在一个线程中创建的SQLite对象只能在同一个线程中使用.

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

python sqlite

79
推荐指数
6
解决办法
8万
查看次数

在Python中序列化Sqlite3

为了充分利用并发性,SQLite3允许线程以三种方式访问​​同一连接:

  1. 单线程.在此模式下,所有互斥锁都被禁用,并且SQLite一次不能在多个线程中使用.
  2. 多线程.在这种模式下,只要在两个或多个线程中不同时使用单个数据库连接,SQLite就可以被多个线程安全地使用.
  3. 序列化.在序列化模式下,SQLite可以被多个线程安全地使用而没有任何限制.

有谁知道如何使用Python序列化连接.
Python具有"check_same_thread",允许在多线程和单线程之间切换; 但是,我无法知道如何将其序列化.

python sqlite concurrency multithreading

18
推荐指数
2
解决办法
7265
查看次数

标签 统计

python ×2

sqlite ×2

concurrency ×1

multithreading ×1