最近,我在我的代码中追踪一个难以捉摸的错误。它归结为一些计算数组一部分平均值的numpy代码。
np.array(X[X == i]).mean(0)
当然,如果没有元素X
的值,i
那么前面的代码相当于计算一个空数组的平均值。
np.array([]).mean(0)
这导致了价值nan
。但在某些架构上,它也会导致此警告。
RuntimeWarning:在 double_scalars 中遇到无效值
我们修复了代码,现在一切正常,但这个故事的另一部分更令人不安。
该错误的表现方式是它导致 Apache 进程卡住了所有陷入“发送回复”状态的工作人员。在“发送回复”中被抓到的工人并不是导致问题的实际工人,而是紧随其后的工人。没有引发 python 异常,内存使用良好,几乎没有使用 CPU。它只是慢慢地削弱了 Apache,直到它完全没有响应。
我们使用 Apache、Django、mod_wsgi 和 numpy 等。
关于为什么这个 numpy 代码导致 Apache 卡住的任何想法?我想采取措施防止它在未来发生。