为了充分利用并发性,SQLite3允许线程以三种方式访问同一连接:
有人知道如何在Python中序列化连接吗?
Python有"check_same_thread“,它允许在多线程和单线程之间切换;但是,我不知道如何将其序列化。
发布于 2011-06-11 12:01:52
Python SQLite模块不是线程安全的。如果您禁用它的检查,那么您需要确保所有代码都是序列化的,包括垃圾收集。(我的APSW模块是threadsafe,也能正确处理错误消息线程安全问题)。
但是,在同一进程中同时使用多个独立连接是安全的,我建议您这样做。此外,将数据库切换到write ahead logging mode,即使编写了大量代码,也应该可以获得非常好的性能。
发布于 2015-11-25 03:27:09
我写了一个库来解决这个问题。这对我很有效。
发布于 2011-06-10 01:20:42
sqlite页面http://www.sqlite.org/threadsafe.html显示,“默认模式是序列化的。”你有没有测试过,发现这不是真的?
编辑:
如果它不能工作,可能是ctype?我不知道这是否会对加载的sqlite模块产生任何影响。我猜我有点怀疑它不会;因为我想象sqlite3_initialize()
函数很可能在模块加载时被调用?或者可能只在创建数据库对象时使用?
http://www.sqlite.org/c3ref/config.html
>>> import sqlite3
>>> import ctypes
>>> from ctypes.util import find_library
>>> sqlite_lib = ctypes.CDLL(find_library('sqlite3'))
>>> sqlite_lib.sqlite3_config(3) # http://www.sqlite.org/c3ref/c_abort.html
0 # no error....
>>>
https://stackoverflow.com/questions/6296055
复制相似问题