[Python-Dev] problem with recursive "yield from" delegation

Jim J. Jewett jimjjewett at gmail.com
Thu Mar 8 01:32:57 CET 2012



http://mail.python.org/pipermail/python-dev/2012-March/117396.html
Stefan Behnel posted:

> I found a problem in the current "yield from" implementation ...

[paraphrasing]

    g1 yields from g2
    g2 yields from g1
XXX     python follows the existing delegation without checking re-entrancy
    g2 (2nd call) checks re-entrancy, and raises an exception
    g1 (2nd call) gets to handle the exception, and doesn't
    g2 (1st call) gets to handle the exception, and does
    

How is this a problem?

Re-entering a generator is a bug.  Python caught it and raised an
appropriate exception.

It would be nice if python caught the generator cycle as soon as it was
created, just as it would be nice if reference cycles were collected as
soon as they became garbage.  But python doesn't promise to catch cycles
immediately, and the checks required to do so would slow down all code,
so in practice the checks are delayed.


-jJ

-- 

If there are still threading problems with my replies, please 
email me with details, so that I can try to resolve them.  -jJ



More information about the Python-Dev mailing list