On Wed, Jan 17, 2018 at 2:24 PM, Guido van Rossum <[email protected]> wrote:
> Perhaps you can update the PEP with a summary of the rejected ideas from
> this thread?
The Rejected Ideas section of the PEP is now updated with the below:
Token.reset() instead of ContextVar.reset()
-------------------------------------------
Nathaniel Smith suggested to implement the ``ContextVar.reset()``
method directly on the ``Token`` class, so instead of::
token = var.set(value)
# ...
var.reset(token)
we would write::
token = var.set(value)
# ...
token.reset()
Having ``Token.reset()`` would make it impossible for a user to
attempt to reset a variable with a token object created by another
variable.
This proposal was rejected for the reason of ``ContextVar.reset()``
being clearer to the human reader of the code which variable is
being reset.
Make Context objects picklable
------------------------------
Proposed by Antoine Pitrou, this could enable transparent
cross-process use of ``Context`` objects, so the
`Offloading execution to other threads`_ example would work with
a ``ProcessPoolExecutor`` too.
Enabling this is problematic because of the following reasons:
1. ``ContextVar`` objects do not have ``__module__`` and
``__qualname__`` attributes, making straightforward pickling
of ``Context`` objects impossible. This is solvable by modifying
the API to either auto detect the module where a context variable
is defined, or by adding a new keyword-only "module" parameter
to ``ContextVar`` constructor.
2. Not all context variables refer to picklable objects. Making a
``ContextVar`` picklable must be an opt-in.
Given the time frame of the Python 3.7 release schedule it was decided
to defer this proposal to Python 3.8.
Yury
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com