On 2016-08-16 12:46 PM, Moritz Sichert via Python-ideas wrote:

2. It's extremely unlikely that somebody will design a system that
switches coroutine runners *while async/awaiting a coroutine*.
Yes, I guess so.


But even in this unlikely use case, you can
easily stack finalizers following this pattern:

    old_finalizer = sys.get_asyncgen_finalizer()
    sys.set_asyncgen_finalizer(my_finalizer)
    try:
      # do my thing
    finally:
      sys.set_asyncgen_finalizer(old_finalizer)
That only works for synchronous code, though, because if this is done in a
coroutine, it might get suspended within the try block and would leak its
own finalizer into the outer world.
set_asyncgen_finalizer is designed to be used *only* by coroutine
runners.  This is a low-level API that coroutines should never
touch.  (At least my experience working with coroutines says so...)
First of all, thanks for your work in this PEP! I think it really completes the
async Python to a state where most synchronous code can be changed easily to be
asynchronous.

Thank you!

[..]
Now my questions:
- Is it correct do check if the async iterator is actually a generator and only
in that case do the whole get/set_asyncgen_finalizer() thing? As I understand,
the finalizer is not needed for "normal" async iterators, i.e. instances of
classes with a __anext__() method.

set_asyncgen_finalizer is only going to be used for native AG.

Asynchronous iterator objects implemented in pure Python, can
store a reference to the running loop and implement __del__
to do any kind of finalization.

- Would it make sense to call sys.set_asyncgen_finalizer(old_finalizer) after
the first call of async_iter.__anext__() instead of only at the end? As I
understand the finalizer is set when the generator is started.
- Is loop.run_until_complete(gen.aclose()) a sensible finalizer? If so, is there
even any other finalizer that would make sense? Maybe creating a task for
gen.aclose() instead of waiting for it to be completed?
Please read a new thread on python-dev.  I think it answers your
questions (in part) and asks a few more!

Thank you,
Yury

_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to