mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
Patch #1953
I implemented the function sys._compact_freelists() and C API functions PyInt_/PyFloat_CompactFreeList() to compact the pre-allocated blocks of ints and floats. They allow the user to reduce the memory usage of a Python process that deals with lots of numbers. The patch also renames sys._cleartypecache to sys._clear_type_cache
This commit is contained in:
parent
a26cf9b760
commit
422051a367
11 changed files with 160 additions and 42 deletions
|
@ -363,6 +363,24 @@ class SysModuleTest(unittest.TestCase):
|
|||
self.assertEqual(type(getattr(sys.flags, attr)), int, attr)
|
||||
self.assert_(repr(sys.flags))
|
||||
|
||||
def test_clear_type_cache(self):
|
||||
sys._clear_type_cache()
|
||||
|
||||
def test_compact_freelists(self):
|
||||
sys._compact_freelists()
|
||||
r = sys._compact_freelists()
|
||||
# freed blocks shouldn't change
|
||||
self.assertEqual(r[0][2], 0)
|
||||
self.assertEqual(r[1][2], 0)
|
||||
# fill freelists
|
||||
ints = list(range(12000))
|
||||
floats = [float(i) for i in ints]
|
||||
del ints
|
||||
del floats
|
||||
# should free more than 200 blocks each
|
||||
r = sys._compact_freelists()
|
||||
self.assert_(r[0][2] > 200, r[0][2])
|
||||
self.assert_(r[1][2] > 200, r[1][2])
|
||||
|
||||
def test_main():
|
||||
test.test_support.run_unittest(SysModuleTest)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue