我一直在运行一些代码,其中一部分从二进制文件加载一个大的1D numpy数组,然后使用
numpy.where()方法更改数组.
以下是代码中执行的操作的示例:
import numpy as np
num = 2048
threshold = 0.5
with open(file, 'rb') as f:
arr = np.fromfile(f, dtype=np.float32, count=num**3)
arr *= threshold
arr = np.where(arr >= 1.0, 1.0, arr)
vol_avg = np.sum(arr)/(num**3)
# both arr and vol_avg needed later
我已经运行了很多次(在免费的机器上,即没有其他禁止CPU或内存使用)没有问题.但最近我注意到,有时候代码会挂起很长一段时间,使运行时间长一个数量级.在这些情况下,我一直在监视%CPU和内存使用率(使用gnome系统监视器),并发现python的CPU使用率降至0%.
在上述操作之间使用基本打印来调试,似乎是任意的,哪个操作导致暂停(即open(),np.fromfile(),np.where()各自分别导致随机运行挂起).这就好像我被随机扼杀,因为在其他运行中没有挂起.
我已经考虑过像垃圾收集或this question这样的东西,但我看不出与我的问题有任何明显的关系(例如击键没有效果).
进一步说明:二进制文件为32GB,机器(运行Linux)有256GB内存.我通过ssh会话远程运行此代码.
编辑:这可能是偶然的,但我注意到,如果我刚刚重启机器后运行代码,就没有挂断.似乎它们在几次运行后开始发生,或者至少是系统的其他用途.