import io import tempfile import os class A: def __del__(self): print('del A') class MyFileIO(io.FileIO): def __del__(self): print('__del__ FileIO') super().__del__() class MyBufferedWriter(io.BufferedWriter): def __del__(self): print('__del__ BufferedWriter') super().__del__() def test(): fd, filename = tempfile.mkstemp() pid = os.fork() data = b'hello' if pid == 0: a = A() a.a = a a.raw = MyFileIO(fd, mode='w') a.buf = MyBufferedWriter(a.raw, buffer_size=1000) a.buf.write(data) del a import gc print('collecting') gc.collect() else: os.waitpid(pid, os.P_WAIT) fp = os.fdopen(fd, 'rb+') fp.seek(0) try: data2 = fp.read() print('read data', data2) if data != data2: print('buffer not flushed') else: print('okay') finally: fp.close() os.unlink(filename) if __name__ == '__main__': test()