import gc import threading import os import sys stdout_fd = sys.stdout.fileno() def log(msg): msg = msg + "\n" msg = msg.encode("utf8") os.write(stdout_fd, msg) def recursive_function(): log("threading.enumerate") threading.enumerate() class EvilGC: def __del__(self): log("EvilGC.__del__") recursive_function() def create_ref_leaks(): a = EvilGC() b = EvilGC() a.b = b b.a = a def main(): for i in range(10): log(f"-- loop {i} --") gc.set_threshold(1 + i) create_ref_leaks() recursive_function() gc.collect() if __name__ == "__main__": main()