[Python-Dev] Timeout for PEP 550 (original) (raw)
[Python-Dev] Timeout for PEP 550 / Execution Context discussion
Nathaniel Smith njs at pobox.com
Sun Oct 15 23:17:46 EDT 2017
- Previous message (by thread): [Python-Dev] Timeout for PEP 550 / Execution Context discussion
- Next message (by thread): [Python-Dev] Timeout for PEP 550 / Execution Context discussion
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sun, Oct 15, 2017 at 6:33 PM, Yury Selivanov <yselivanov.ml at gmail.com> wrote:
Hi,
It looks like the discussion about the execution context became extremely hard to follow. There are many opinions on how the spec for generators should look like. What seems to be "natural" behaviour/example to one, seems to be completely unreasonable to other people. Recent emails from Guido indicate that he doesn't want to implement execution contexts for generators (at least in 3.7). In another thread Guido said this: "... Because coroutines and generators are similar under the covers, Yury demonstrated the issue with generators instead of coroutines (which are unfamiliar to many people). And then somehow we got hung up about fixing the problem in the example." And Guido is right. My initial motivation to write PEP 550 was to solve my own pain point, have a solution for async code. 'threading.local' is completely unusable there, but complex code bases demand a working solution. I thought that because coroutines and generators are so similar under the hood, I can design a simple solution that will cover all edge cases. Turns out it is not possible to do it in one pass. Therefore, in order to make some progress, I propose to split the problem in half: Stage 1. A new execution context PEP to solve the problem *just for async code*. The PEP will target Python 3.7 and completely ignore synchronous generators and asynchronous generators. It will be based on PEP 550 v1 (no chained lookups, immutable mapping or CoW as an optimization) and borrow some good API decisions from PEP 550 v3+ (contextvars module, ContextVar class). The API (and C-API) will be designed to be future proof and ultimately allow transition to the stage 2.
If you want to ignore generators/async generators, then I think you don't even want PEP 550 v1, you just want something like a {set,get}_context_state API that lets you access the ThreadState's context dict (or rather, an opaque ContextState object that holds the context dict), and then task schedulers can call them at appropriate moments.
-n
-- Nathaniel J. Smith -- https://vorpus.org
- Previous message (by thread): [Python-Dev] Timeout for PEP 550 / Execution Context discussion
- Next message (by thread): [Python-Dev] Timeout for PEP 550 / Execution Context discussion
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]