New submission from Liran Nuna <liran...@gmail.com>:
An interesting property of async programming is that execution order is nondeterministic and async function "pause" and "resume" execution as events come in. This can play havok with context managers, especially ones that wrap a global state change. I can best explain it with code - see attached file. If you were to run this, you'd notice that "Should be logged" does not get logged - this is because the execution order runs the context manager immediately and that affects the entire batch (created by asyncio.gather). Is there a way to hook into a pause/resume handling of coroutines so this kind of thing could be done correctly? I'm aware that this particular problem could be solved with the new context variables introduced with python3.7, however it is just a simplification of our actual issue. Iterators also suffer from this issue, as `yield` pauses and resumes execution. ---------- components: Interpreter Core files: async_context_managers.py messages: 320101 nosy: Liran Nuna priority: normal severity: normal status: open title: Hooking into pause/resume of iterators/coroutines type: behavior versions: Python 3.4, Python 3.5, Python 3.6, Python 3.7, Python 3.8 Added file: https://bugs.python.org/file47646/async_context_managers.py _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33918> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com