mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #13390: New function :func:sys.getallocatedblocks()
returns the number of memory blocks currently allocated.
Also, the ``-R`` option to regrtest uses this function to guard against memory allocation leaks.
This commit is contained in:
parent
b4b8f234d4
commit
f9d0b1256f
9 changed files with 123 additions and 22 deletions
|
@ -6,6 +6,7 @@ import textwrap
|
|||
import warnings
|
||||
import operator
|
||||
import codecs
|
||||
import gc
|
||||
|
||||
# count the number of test runs, used to create unique
|
||||
# strings to intern in test_intern()
|
||||
|
@ -611,6 +612,29 @@ class SysModuleTest(unittest.TestCase):
|
|||
ret, out, err = assert_python_ok(*args)
|
||||
self.assertIn(b"free PyDictObjects", err)
|
||||
|
||||
@unittest.skipUnless(hasattr(sys, "getallocatedblocks"),
|
||||
"sys.getallocatedblocks unavailable on this build")
|
||||
def test_getallocatedblocks(self):
|
||||
# Some sanity checks
|
||||
a = sys.getallocatedblocks()
|
||||
self.assertIs(type(a), int)
|
||||
self.assertGreater(a, 0)
|
||||
try:
|
||||
# While we could imagine a Python session where the number of
|
||||
# multiple buffer objects would exceed the sharing of references,
|
||||
# it is unlikely to happen in a normal test run.
|
||||
self.assertLess(a, sys.gettotalrefcount())
|
||||
except AttributeError:
|
||||
# gettotalrefcount() not available
|
||||
pass
|
||||
gc.collect()
|
||||
b = sys.getallocatedblocks()
|
||||
self.assertLessEqual(b, a)
|
||||
gc.collect()
|
||||
c = sys.getallocatedblocks()
|
||||
self.assertIn(c, range(b - 50, b + 50))
|
||||
|
||||
|
||||
class SizeofTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue