[Python-Dev] FYI: more clues re: tee+generator leak (original) (raw)

Phillip J. Eby pje at telecommunity.com
Mon Apr 17 18:53:57 CEST 2006


I've been fiddling a bit with test_generators this morning, and have found that a stripped down version of the fibonacci test only leaks if the generator has a reference to a copied tee object. It doesn't matter whether the copied tee object is the second result from tee(), or if you just create a single tee object and use its copy() method, the leak only occurs if the cycle is:

 geniter -> frame -> ... -> copied_tee -> tdo ---+
    ^                                            |
    |                                            |
    +--------------------------------------------+

The "..." is to indicate that the frame may reference the object directly as a local variable, or via a cell. I've tried it both ways and it still leaks. Replacing "copied_tee" with an uncopied tee object does not leak.

I have no idea what this means, although I've been staring at the relevant itertools code for some time now. It doesn't appear that the traverse functions are skipping anything.

By the way, the above cycle will leak even if the generator is never iterated even once; it's quite simple to set up. I'm testing this using -R:: on test_generators, and hacking on the _fib function and friends.



More information about the Python-Dev mailing list