2013-10-06 19 views
3

最近,我正在追蹤我的代碼中一個難以捉摸的錯誤。它歸結爲計算數組的一部分的平均值的一些numpy代碼。Numpy運行時警告導致Apache Worker凍結在「發送回覆」狀態

np.array(X[X == i]).mean(0) 

當然,如果有在X沒有元素與i然後以前的代碼的值等效於計算一個空數組的平均值。

np.array([]).mean(0) 

此結果的值爲nan。但是在一些體系結構中,它也會導致此警告。

RuntimeWarning:在double_scalars

遇到無效值,我們固定的代碼,現在一切都非常順利,但是有這個故事,是更麻煩一點的另一部分。

該錯誤的表現方式是,它導致Apache進程抓住每個工作人員卡在「發送回覆」狀態。陷入「發送回覆」中的工作人員不是造成問題的實際工作人員,而是緊隨其後的人員。沒有引發python異常,內存使用情況良好,CPU幾乎沒有被使用。它只是慢慢地癱瘓了Apache,直到它完全沒有響應。

enter image description here

我們使用Apache,Django的,mod_wsgi的,和numpy的等等。

關於爲什麼這個numpy代碼導致Apache抓住任何想法?我想採取行動,以防止它在未來。

回答

2

從@Graham大廈鄧普爾頓回答,只是加入這一行:

WSGIApplicationGroup %{GLOBAL} 

我的應用程序的Apache的配置文件解決了該問題對我來說。