[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-11-03 Thread Erlend E. Aasland


Change by Erlend E. Aasland :


--
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-11-03 Thread Pablo Galindo Salgado


Pablo Galindo Salgado  added the comment:


New changeset c2739867113a2b650db300c03ef06cf18dcee3f4 by Erlend Egeberg 
Aasland in branch 'main':
bpo-45613: Set `sqlite3.threadsafety` dynamically (GH-29227)
https://github.com/python/cpython/commit/c2739867113a2b650db300c03ef06cf18dcee3f4


--
nosy: +pablogsal

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Erlend E. Aasland


Erlend E. Aasland  added the comment:

BTW, I've verified that the overhead of adding this query is negligible.

$ python -m pyperf compare_to --min-speed 1 main.json patched.json 
Benchmark hidden because not significant (1): sqlite_synth

git switch -
Switched to branch 'main'
$ ./python.exe -m timeit "import sqlite3; sqlite3.threadsafety"
100 loops, best of 5: 225 nsec per loop
$ git switch -
Switched to branch 'sqlite-threadsafety'
$ ./python.exe -m timeit "import sqlite3; sqlite3.threadsafety"
100 loops, best of 5: 221 nsec per loop

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Erlend E. Aasland


Change by Erlend E. Aasland :


--
keywords: +patch
pull_requests: +27491
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/29227

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Erlend E. Aasland


Erlend E. Aasland  added the comment:

FYI, it is also possible to change the threaded mode using sqlite3_config(), 
however that API is not exposed to the sqlite3 module, and there is no plans 
for doing so in the near future :)

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Marc-Andre Lemburg


Marc-Andre Lemburg  added the comment:

+1 on setting the attributes dynamically. Other DB-API modules use a
similar approach.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Erlend E. Aasland


New submission from Erlend E. Aasland :

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 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Erlend E. Aasland


Change by Erlend E. Aasland :


--
nosy: +paul.moore

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45613] [sqlite3] set threadsafety attribute based on default SQLite threaded mode

2021-10-26 Thread Erlend E. Aasland


Change by Erlend E. Aasland :


--
nosy: +serhiy.storchaka

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com