[issue43911] Queue.get() memory leak
Jens
report at bugs.python.org
Fri Apr 23 08:24:00 EDT 2021
Jens <multiks2200 at gmail.com> added the comment:
Thanks for your input.
So i've run the tests with the List of Lists Queue class, there seems to be a resulting difference depending on what qsize() method I define, that is called my script.
For an instance where qsize just return None,
class QueueLists(list):
def put(self, x):
if not self or len(self[-1]) >= 66:
self.append([])
self[-1].append(x)
def get(self):
if not self:
raise IndexError
block = self[0]
x = block.pop(0)
if not block:
self.pop(0)
return x
# def qsize(self):
# tot = 0
# for elem in self:
# tot += len(elem)
# return tot
def qsize(self):
return None
The results are:
>#########
>del_after_puts False del_after_gets True n_puts 20000000
>before run
>mem_pct 0.15%
>------ put done ----- qsize None
>mem_pct 38.06%
>------ gets done ----- qsize None
>mem_pct 2.35%
>deleting queue after gets []
>mem_pct 2.35%
>time elapsed 0:01:04.703969
For a Queue instance, where qsize() returns the actual size
class QueueLists(list):
def put(self, x):
if not self or len(self[-1]) >= 66:
self.append([])
self[-1].append(x)
def get(self):
if not self:
raise IndexError
block = self[0]
x = block.pop(0)
if not block:
self.pop(0)
return x
def qsize(self):
tot = 0
for elem in self:
tot += len(elem)
return tot
the results are:
>#########
>del_after_puts False del_after_gets True n_puts 20000000
>before run
>mem_pct 0.15%
>------ put done ----- qsize 20000000
>mem_pct 38.05%
>------ gets done ----- qsize 0
>mem_pct 2.35%
>deleting queue after gets []
>mem_pct 0.18%
>time elapsed 0:00:53.347746
So both instances leak as you've indicated, but the one that returns None as queue size does not get it's leak released after the instance is deleted which is a weird difference.
----------
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue43911>
_______________________________________
More information about the Python-bugs-list
mailing list