3

最近,我在我的代码中追踪一个难以捉摸的错误。它归结为一些计算数组一部分平均值的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 卡住的任何想法?我想采取措施防止它在未来发生。

4

2 回答 2

2

看:

从内存中,numpy 受到该问题的一个变体的影响。确保强制 WSGI 应用程序在主解释器上下文中运行。

于 2013-10-06T21:37:32.997 回答
2

从@Graham Dumpleton 回答构建,只需添加以下行:

WSGIApplicationGroup %{GLOBAL}

到我的应用程序的 apache 配置文件为我解决了这个问题。

于 2013-10-09T19:36:26.380 回答