New submission from Erlend E. Aasland <erlend.aasl...@innova.no>:

Currently, the sqlite3 DB-API 2.0 attribute 'threadsafety' is hard-coded to 1, 
meaning "threads may share the module, but not connections". This is not always 
true, since it depends on the default SQLite threaded mode, selected at 
compile-time with the SQLITE_THREADSAFE define.

SQLite's default compile-time threaded mode is SQLITE_THREADSAFE=1, also known 
as "serialized threaded mode", meaning SQLite can be safely used by multiple 
threads with no restriction. This mode equals DB-API 2.0 threadsafety level 3: 
threads may share the module, connections and cursors.

On macOS 11.6, the system supplied Python 3 and SQLite 3 uses 
SQLITE_THREADSAFE=2 (also known as "multi-thread mode"), meaning SQLite can be 
safely used by multiple threads provided that no single database connection is 
used simultaneously in two or more threads. This mode equals DB-API 2.0 
threadsafety level 1: threads may share the module, but not connections.

With SQLITE_THREADSAFE=0 (also known as "single-thread mode"), meaning all 
mutexes are disabled and SQLite is unsafe to use in more than a single thread 
at once. This mode equals DB-API 2.0 threadsafety level 0: threads may not 
share the module.


Suggesting to set the 'treadsafety' dynamically at sqlite3 module load time, 
either via Lib/sqlite3/dbapi2.py, or in C during module init (slightly faster).


See also:

- https://www.python.org/dev/peps/pep-0249/
- https://sqlite.org/threadsafe.html
- 
https://discuss.python.org/t/is-sqlite3-threadsafety-the-same-thing-as-sqlite3-threadsafe-from-the-c-library/11463/11

----------
assignee: erlendaasland
components: Extension Modules
messages: 405035
nosy: erlendaasland, lemburg
priority: normal
severity: normal
status: open
title: [sqlite3] set threadsafety attribute based on default SQLite threaded 
mode
versions: Python 3.11

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45613>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to