【发布时间】:2021-04-02 20:37:23
【问题描述】:
从以前给定或计算的非常长的小字节数数组(MB、GB、TB)传出(所以我使用bytearray),我需要在下一个迭代步骤中计算后续bytearray .可以计算下一个迭代步骤bytearray 所需的大小,因此我可以使用bytearray 的构造函数之一预先分配内存:
# A is the current/former bytearray
# sizes of array: 1 -> 2 -> 8 -> 48 -> 480 -> 5_760 -> 92_160 -> 1_658_880 ->
# 36_495_360 -> 1_021_870_080 -> 30_656_102_400 [ -> 1_103_619_686_400 ... ]
ls = NextLenArray(A)
L = bytearray(ls)
# generator will create new values out of the current existing
for i,j in enumerate(gen_values(A)):
L[i] = j
# need to assign it back into A for next iteration
A = L
另外,很明显通过使用生成器内部理解直接创建下一个bytearray。我不知道如何以及何时(逐步?)保留内存。
A = bytearray(j for j in gen_values(A))
看起来它运行得快了一点,但是监控任务管理器在生成时会使用更多内存,并且在以后的迭代步骤中它会提前一步停止,原因是MemoryError。
是否有一种简单的方法可以通过分配具有所需大小的bytearray 并将其与生成器/综合列表一起使用来组合预预留?
【问题讨论】:
标签: arrays python-3.x performance out-of-memory