Message276990
No memory leak if subprocess is spawned in a thread neither:
---
import tracemalloc; tracemalloc.start()
import subprocess, threading, time, gc
def spawn(event) :
subprocess.check_output("true")
gc.collect(), gc.collect(), gc.collect()
event.set()
def func(loops):
event = threading.Event()
for x in range(loops):
event.clear()
timer = threading.Timer(0, spawn, (event,))
timer.start()
event.wait()
func(100)
gc.collect();gc.collect();gc.collect();gc.collect()
a = tracemalloc.get_traced_memory()[1]
print("first", a, "B")
loops = 1000
func(loops)
gc.collect();gc.collect();gc.collect();gc.collect()
b = tracemalloc.get_traced_memory()[1]
print("after", loops, "loops, mem:", b, "B")
d = (b-a) / loops
print("diff: %.1f B/loop" % d)
loops = 1000
func(loops)
gc.collect();gc.collect();gc.collect();gc.collect()
c = tracemalloc.get_traced_memory()[1]
print("after", loops, "loops, mem:", c, "B")
d = (c-b) / loops
print("diff2: %.1f B/loop" % d)
---
Output:
---
first 1013738 B
after 1000 loops, mem: 1014266 B
diff: 0.5 B/loop
after 1000 loops, mem: 1014318 B
diff2: 0.1 B/loop
---
Sorry, 0.5 byte/loop is not a memory leak :-) |
|
Date |
User |
Action |
Args |
2016-09-19 22:58:35 | vstinner | set | recipients:
+ vstinner, r.david.murray, ztane, The Compiler, Xavion |
2016-09-19 22:58:35 | vstinner | set | messageid: <1474325915.5.0.0425436957273.issue28165@psf.upfronthosting.co.za> |
2016-09-19 22:58:35 | vstinner | link | issue28165 messages |
2016-09-19 22:58:35 | vstinner | create | |
|