test_io is the only leaky test on trunk that I know of. I narrowed down the leaks to the code below. It's possible there are other leaks in test_io. n -- import sys, gc import _fileio, io class FileIO(_fileio._FileIO, io.RawIOBase): def close(self): io.RawIOBase.close(self) def main(): class MyFileIO(FileIO): pass f = MyFileIO('tt-test', "w") f.close() for i in range(10): main() print(gc.collect()) print(sys.gettotalrefcount())
On Tue, Apr 1, 2008 at 6:34 AM, Neal Norwitz
test_io is the only leaky test on trunk that I know of. I narrowed down the leaks to the code below.
It's possible there are other leaks in test_io.
n -- import sys, gc import _fileio, io
class FileIO(_fileio._FileIO, io.RawIOBase): def close(self): io.RawIOBase.close(self)
def main(): class MyFileIO(FileIO): pass f = MyFileIO('tt-test', "w") f.close()
for i in range(10): main() print(gc.collect()) print(sys.gettotalrefcount())
The problem is that the MyFileIO class is registered in io.RawIOBase._abc_cache, and never freed. This is a problem with ABCs: _abc_cache should be changed to a WeakSet, like python3.0 did. I filed http://bugs.python.org/issue2521 about this problem. -- Amaury Forgeot d'Arc
participants (2)
-
Amaury Forgeot d'Arc
-
Neal Norwitz