memorymonitor – 内存监控助手

exception memorymonitor.AllocationError

基地: Exception

分配相关错误的 Catchall 异常。

初始化自我。请参阅 help(type(self)) 以获得准确的签名。

class memorymonitor.AllocationAlarm(*, minimum_block_count: int = 1)
分配一个 minimum_block_count或多个块时抛出异常

活动时发生。

跟踪分配:

import memorymonitor

aa = memorymonitor.AllocationAlarm(minimum_block_count=2)
x = 2
# Should not allocate any blocks.
with aa:
    x = 5

# Should throw an exception when allocating storage for the 20 bytes.
with aa:
    x = bytearray(20)
ignore(self, count: int)AllocationAlarm

在引发异常之前设置要忽略的适用分配的数量。在上下文退出时自动设置回零。

with 块中使用它:

# Will not alarm because the bytearray allocation will be ignored.
with aa.ignore(2):
    x = bytearray(20)
__enter__(self)AllocationAlarm

启用警报。

__exit__(self)None

退出上下文时自动禁用分配警报。有关更多信息,请参阅 Lifetime 和 ContextManagers

class memorymonitor.AllocationSize

跟踪两个桶的幂的分配数量。

它将有 16 个 16 位桶来跟踪分配计数。它是总分配意味着忽略释放。重新分配的内存在分配时和重新分配时计算两次。

桶是根据块来衡量的,块是堆的最细粒度。这意味着桶 0 将计算小于或等于每个块的字节数的所有分配,通常为 16。桶 2 将小于或等于 4 个块。请参阅 bytes_per_block 将块转换为字节。

多个 AllocationSize 可用于跟踪不同的代码边界。

跟踪分配:

import memorymonitor

mm = memorymonitor.AllocationSize()
with mm:
  print("hello world" * 3)

for bucket, count in enumerate(mm):
    print("<", 2 ** bucket, count)
bytes_per_block :int

每个块的字节数

__enter__(self)AllocationSize

清除计数并恢复跟踪。

__exit__(self)None

退出上下文时自动暂停分配跟踪。有关更多信息,请参阅 Lifetime 和 ContextManagers

__len__(self)int

返回分配桶的数量。

这允许您:

mm = memorymonitor.AllocationSize()
print(len(mm))
__getitem__(self, index: int)Optional[int]

返回给定存储桶的分配计数。

这允许您:

mm = memorymonitor.AllocationSize()
print(mm[0])