最近,我正在追蹤我的代碼中一個難以捉摸的錯誤。它歸結爲計算數組的一部分的平均值的一些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,直到它完全沒有響應。
我們使用Apache,Django的,mod_wsgi的,和numpy的等等。
關於爲什麼這個numpy代碼導致Apache抓住任何想法?我想採取行動,以防止它在未來。