【发布时间】:2013-10-13 08:57:05
【问题描述】:
最近,我在我的代码中寻找一个难以捉摸的错误。它归结为一些计算数组一部分平均值的 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 卡住的任何想法?我想采取措施防止它在未来发生。
【问题讨论】:
标签: django apache numpy mod-wsgi