Python多线程使用Sqlite时出现段错误!
我正在开发一个使用Sqlite的Python代码,这个程序是多线程的。一个远程主机会调用一些xmlrpc函数,然后会创建新的线程。每个在新线程中运行的函数都会使用Sqlite来插入数据或从数据库中读取数据。
我遇到的问题是,当同时调用服务器超过5次时,服务器就会崩溃,出现“段错误”。而且输出的信息没有提供其他任何线索。有没有人知道这可能是什么原因呢?
2 个回答
1
我的 APSW 模块是线程安全的,你可以放心使用。标准的 Python SQLite 在多个线程同时使用时是不安全的。
2
如果你查看SQLite的文档(http://www.sqlite.org/threadsafe.html),你会看到它提到:
SQLite支持三种不同的线程模式:
单线程模式。在这个模式下,所有的互斥锁都被禁用,所以SQLite在同一时间只能被一个线程使用,其他线程不能同时使用。
多线程模式。在这个模式下,SQLite可以被多个线程安全地使用,但前提是不能在两个或更多线程中同时使用同一个数据库连接。
序列化模式。在序列化模式下,SQLite可以被多个线程安全地使用,没有任何限制。
所以你要么是在单线程模式,要么是在多线程模式下重用连接。重用连接只有在顺序模式下是安全的(但这样会比较慢)。
现在,Python的文档说明不应该允许你共享连接。你是在使用python-sqlite3模块,还是在直接与数据库进行交互呢?