-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
bpo-42862: Use functools.lru_cache iso. _sqlite.Cache in sqlite3 module #24203
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
9fa24b1
to
8f8694a
Compare
@rhettinger Would you mind reviewing the use of |
2cceb7f
to
ec6485f
Compare
6cf36b2
to
c79c3a9
Compare
FYI @berkerpeksag, I've rebased onto |
c79c3a9
to
3d85a78
Compare
3d85a78
to
e8478cf
Compare
Rebased onto master to resolve conflicts. Also added a tiny optimisation: increase the default cache size from 100 to 128. I'm guessing it is way to late to get this into 3.10 now :) |
6ceadcd
to
c561bab
Compare
c561bab
to
18a030c
Compare
@pablogsal, two questions:
|
Unless you are changing the module itself, is not very relevant, but you are always free to ask for his advice :)
That seems like some genuine problem. Maybe @vstinner has seen this before? |
Modules/_sqlite/connection.c
Outdated
@@ -57,6 +56,39 @@ static const char * const begin_statements[] = { | |||
static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level, void *Py_UNUSED(ignored)); | |||
static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self); | |||
|
|||
static PyObject *_lru_cache = NULL; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Be careful with static globals as this is not subinterpreter-friendly. @vstinner or @ericsnowcurrently can explain further.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Currently, there's no module state in sqlite3. Converting the sqlite3 state to heap types has been the first step on the path to sqlite3 multi-phase initialisation and module state. I can use this PR to establish a static global state, and put _lru_cache
there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a global state struct and put _lru_cache
there. I can add the rest of the static data to it in a separate PR. One step closer to multi-phase init and sub-interpreter support.
See bb186dca837c805cf5d78ae7675d8a43a0b217cd
When you are done with the fixes, could you test with the buildbots using the buildbot label? |
6337da4
to
a95a386
Compare
I messed up the previous merge so I had to rebase and force push. Sorry 'bout the mess. |
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
@erlend-aasland is this still a draft (I assume not)? :) |
Nope, I was waiting for the CI, just to be sure :) |
Great job @erlend-aasland! 🎉 |
Thanks, Pablo! 😃 |
https://bugs.python.org/issue42862