Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
bpo-34204: Use pickle.DEFAULT_PROTOCOL in shelve#19639
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
bpo-34204: Use pickle.DEFAULT_PROTOCOL in shelve #19639
Uh oh!
There was an error while loading. Please reload this page.
Conversation
ZackerySpytz commented Apr 21, 2020 • edited by miss-islington
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by miss-islington
Uh oh!
There was an error while loading. Please reload this page.
Use pickle.DEFAULT_PROTOCOL (currently 4) in shelve instead of a hardcoded 3.
corona10 left a comment
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.
Would you like to add NEWS on what's new?
It looks like noticiable changing for user.
corona10 commented Apr 23, 2020
@vstinner Do you have any ideas? |
vstinner commented Apr 23, 2020
pitrou commented Apr 23, 2020
I don't think this is ok to change. cc @rhettinger |
vstinner commented Apr 23, 2020
Oh sorry, I misunderstood the PR. I read that it changes the default pickle version in multiprocessing (oops), but it's about the shelve module :-) |
corona10 commented May 27, 2020
IMHO, we need more discussion. |
vstinner left a comment
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.
LGTM if the PR is updated for Python 3.10 (right now, it says "new in 3.9").
Sorry, first I read that this PR was for multiprocessing... For shelve, IMO it's reaonsable to use the latest pickle version. The main drawback is that shelve files created by Python 3.10 can no longer be read by Python 3.7 and older: protocol 5 was introduced in Python 3.8.
https://docs.python.org/dev/library/pickle.html#data-stream-format
IMHO it's a reasonable limitation. Also, it's well documented that the pickle protocol can easily controlled by the protocol parameter of shelve.open():
https://docs.python.org/dev/library/shelve.html#shelve.open
vstinner commented May 27, 2020
Oh, @serhiy-storchaka created https://bugs.python.org/issue34204 so it would be nice to also hear @serhiy-storchaka on this PR :-) |
serhiy-storchaka commented May 27, 2020
We can also use just |
vstinner commented May 27, 2020
I prefer to have |
pitrou commented May 27, 2020
Yes, so if it's well documented, what's the point of changing the default and breaking compatibility? |
vstinner commented May 27, 2020
Hum, I measured the file disk depending on the pickle protocol. The efficiency depends on values: https://bugs.python.org/issue34204 |
marco-c commented Oct 19, 2020
@ZackerySpytz are you going to update the PR? |
marco-c commented Oct 28, 2020
My PR to fix the same issue is #22751. |
…pickle-DEFAULT_PROTOCOL
ZackerySpytz commented Oct 28, 2020
I have just pushed an update. |
marco-c commented Oct 28, 2020
Thanks, I'll close mine then! |
…lots1 * origin/master: (365 commits) bpo-42029: Remove IRIX code (pythonGH-23023) bpo-42143: Ensure PyFunction_NewWithQualName() can't fail after creating the func object (pythonGH-22953) bpo-34204: Use pickle.DEFAULT_PROTOCOL in shelve (pythonGH-19639) bpo-41805: Documentation for PEP 585 (pythonGH-22615) bpo-42161: Micro-optimize _collections._count_elements() (pythonGH-23008) bpo-42161: Remove private _PyLong_Zero and _PyLong_One (pythonGH-23003) bpo-42099: Fix reference to ob_type in unionobject.c and ceval (pythonGH-22829) bpo-41659: Disallow curly brace directly after primary (pythonGH-22996) bpo-6761: Enhance __call__ documentation (pythonGH-7987) bpo-42161: Modules/ uses _PyLong_GetZero() and _PyLong_GetOne() (pythonGH-22998) bpo-41474, Makefile: Add dependency on cpython/frameobject.h (pythonGH-22999) bpo-42157: Rename unicodedata.ucnhash_CAPI (pythonGH-22994) bpo-42161: Use _PyLong_GetZero() and _PyLong_GetOne() (pythonGH-22995) bpo-30681: Support invalid date format or value in email Date header (pythonGH-22090) bpo-42161: Add _PyLong_GetZero() and _PyLong_GetOne() (pythonGH-22993) bpo-42123: Run the parser two times and only enable invalid rules on the second run (pythonGH-22111) bpo-42157: Convert unicodedata.UCD to heap type (pythonGH-22991) bpo-42157: unicodedata avoids references to UCD_Type (pythonGH-22990) bpo-39101: Fixes BaseException hang in IsolatedAsyncioTestCase. (pythonGH-22654) bpo-1635741: _PyUnicode_Name_CAPI moves to internal C API (pythonGH-22713) ...
Use pickle.DEFAULT_PROTOCOL (currently 5) in shelve instead of a hardcoded 3.
Use pickle.DEFAULT_PROTOCOL (currently 5) in shelve instead of a
hardcoded 3.
https://bugs.python.org/issue34204
Automerge-Triggered-By: GH:csabella