Karthikeyan Singaravelan <tir.kar...@gmail.com> added the comment:
Interesting, I used tracemalloc to see if it helps and it gave me a line in Lib/tempfile.py . Supplying path to support.temp_dir(path="/tmp/") causes random directory code was not to be hit and there was no memory leak. So I removed the _Random() initialization in _RandomNameSequence in Lib/tempfile.py and instead of self._rng.choice I used random.choice and still had the leak. I replaced the code to generate random letters letters = [choose(c) for dummy in range(8)] where choose is random.choice with c = "a" and the memory leak stopped. I tried below combinations at line [0] and ran test to see if the memory leaks. I also tried -R 10:10 just to make sure my limits are higher enough. Using random.shuffle on a set of characters also causes leak. I am not sure why a combination of importlib.invalidate_caches, support.temp_dir using tempfile and __import__ causes these leaks or perhaps I am debugging or using huntrleaks in an incorrect manner. # No leak letters = [choose("a") for dummy in range(8)] letters = ["a" for dummy in range(8)] letters = [choose(self.characters[0]) for dummy in range(8)] # Memory leak letters = [choose("ab") for dummy in range(8)] letters = [choose(self.characters[:]) for dummy in range(8)] letters = [choose(list(self.characters)) for dummy in range(8)] # Below also leaks characters = list("abcde") # list("abcd") doesn't leak self.rng.shuffle(characters) letters = characters[:8] from unittest import TestCase import tracemalloc import sys import os from test import support def test_importlib_cache_tempdir(): import importlib importlib.invalidate_caches() with support.temp_dir() as path: # with support.temp_dir(path="/tmp") as path: (no leak) dirname = os.path.dirname(path) basename = os.path.basename(path) os.mkdir(os.path.join(path, 'test2')) with support.DirsOnSysPath(dirname): __import__(f"{basename}.test2".format(basename=basename)) class Tests(TestCase): def test_bug(self): tracemalloc.start() for _ in range(10): test_importlib_cache_tempdir() snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('traceback') print("[ Top 10 ]") for stat in top_stats[:10]: for line in stat.traceback.format(): print(line) $ ./python.exe -m test -R 3:3 test_import_bug_tempdir Run tests sequentially 0:00:00 load avg: 2.55 [1/1] test_import_bug_tempdir beginning 6 repetitions 123456 [ Top 10 ] File "<frozen importlib._bootstrap_external>", line 1486 File "<frozen importlib._bootstrap_external>", line 1461 File "<frozen importlib._bootstrap_external>", line 1469 File "<frozen importlib._bootstrap>", line 683 File "<frozen importlib._bootstrap>", line 509 File "<frozen importlib._bootstrap_external>", line 1378 File "<frozen importlib._bootstrap>", line 344 File "<frozen importlib._bootstrap>", line 36 File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/tempfile.py", line 136 self._rng = _Random() File "<frozen importlib._bootstrap_external>", line 1342 .[ Top 10 ] File "<frozen importlib._bootstrap_external>", line 1486 File "<frozen importlib._bootstrap_external>", line 1461 File "<frozen importlib._bootstrap_external>", line 1469 File "<frozen importlib._bootstrap>", line 683 File "<frozen importlib._bootstrap>", line 509 File "<frozen importlib._bootstrap>", line 344 File "<frozen importlib._bootstrap>", line 36 File "<frozen importlib._bootstrap_external>", line 64 File "<frozen importlib._bootstrap_external>", line 1342 File "<frozen importlib._bootstrap_external>", line 1378 .[ Top 10 ] File "<frozen importlib._bootstrap_external>", line 1486 File "<frozen importlib._bootstrap_external>", line 1461 File "<frozen importlib._bootstrap_external>", line 1469 File "<frozen importlib._bootstrap>", line 683 File "<frozen importlib._bootstrap>", line 509 File "<frozen importlib._bootstrap>", line 344 File "<frozen importlib._bootstrap>", line 36 File "<frozen importlib._bootstrap_external>", line 64 File "<frozen importlib._bootstrap_external>", line 1342 File "<frozen importlib._bootstrap_external>", line 1132 .[ Top 10 ] File "<frozen importlib._bootstrap_external>", line 1486 File "<frozen importlib._bootstrap_external>", line 1461 File "<frozen importlib._bootstrap_external>", line 1469 File "<frozen importlib._bootstrap>", line 509 File "<frozen importlib._bootstrap>", line 683 File "<frozen importlib._bootstrap>", line 344 File "<frozen importlib._bootstrap>", line 36 File "<frozen importlib._bootstrap_external>", line 64 File "<frozen importlib._bootstrap_external>", line 1342 File "<frozen importlib._bootstrap_external>", line 1132 .[ Top 10 ] File "<frozen importlib._bootstrap_external>", line 1486 File "<frozen importlib._bootstrap_external>", line 1461 File "<frozen importlib._bootstrap_external>", line 1469 File "<frozen importlib._bootstrap>", line 509 File "<frozen importlib._bootstrap>", line 683 File "<frozen importlib._bootstrap>", line 344 File "<frozen importlib._bootstrap>", line 36 File "<frozen importlib._bootstrap_external>", line 64 File "<frozen importlib._bootstrap_external>", line 1342 File "<frozen importlib._bootstrap_external>", line 1132 .[ Top 10 ] File "<frozen importlib._bootstrap_external>", line 1486 File "<frozen importlib._bootstrap_external>", line 1461 File "<frozen importlib._bootstrap_external>", line 1469 File "<frozen importlib._bootstrap>", line 509 File "<frozen importlib._bootstrap>", line 683 File "<frozen importlib._bootstrap>", line 344 File "<frozen importlib._bootstrap>", line 36 File "<frozen importlib._bootstrap_external>", line 64 File "<frozen importlib._bootstrap_external>", line 1342 File "<frozen importlib._bootstrap_external>", line 1132 . test_import_bug_tempdir leaked [980, 980, 980] references, sum=2940 test_import_bug_tempdir leaked [370, 370, 370] memory blocks, sum=1110 test_import_bug_tempdir failed == Tests result: FAILURE == 1 test failed: test_import_bug_tempdir Total duration: 3 sec 254 ms Tests result: FAILURE ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue36784> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com