擅长:python、mysql、java
<p>我是Python<a href="http://code.google.com/p/apsw/" rel="nofollow">(APSW)</a>的替代SQLite包装器的作者,对这个问题非常熟悉。SQLite本身曾经要求对象-数据库连接和游标只能在同一个线程中使用。在SQLite 3.5左右,这一点已经改变了,您可以并发地使用对象,尽管SQLite内部有自己的锁定,所以您实际上并没有获得并发性能。默认的pythonsqlite包装器(aka pysqlite)甚至支持SQLite 3的旧版本,因此它会继续执行此限制,即使SQLite本身不再需要它。但是,pysqlite代码需要修改以允许并发,因为它包装SQLite的方式不安全—例如,处理错误消息是不安全的,因为SQLite API设计缺陷,需要特殊处理。在</p>
<p>注意,光标非常便宜。不要试图重复使用它们或将它们视为珍贵。实际的底层SQLite对象(sqlite3_stmt)保存在缓存中,并根据需要重用。在</p>
<p>如果您想要最大的并发性,那么打开多个连接并同时使用它们。在</p>
<p>APSW文档有更多关于<a href="http://apidoc.apsw.googlecode.com/hg/execution.html#multi-threading-and-re-entrancy" rel="nofollow">multi-threading and re-entrancy</a>的内容。注意,它有额外的代码来允许pysqlite没有的实际并发使用,但是其他提示和信息适用于SQLite的任何使用。在</p>