Apache-2.2

安裝 scipy 後 apache + mod_wsgi 無響應

  • January 31, 2019

我目前正在使用 Apache 2.2.15 和 mod_wsgi 3.2 執行 Centos 6.4 伺服器。該伺服器託管一個基於 django 的站點(django 1.5.1,python 2.6.6)。在我通過 pip 安裝 scipy 0.12.0 之前,一切都執行良好。現在,當我嘗試載入 django 應用程序時,伺服器沒有響應,並且生成的子 httpd 程序似乎掛起。查看我的日誌(/var/logs/httpd/error_log、我的 vhost error.log 和我的系統日誌)不會產生任何錯誤。

如果我通過 django manage.py shell 載入我的模型等,一切正常,這讓我相信這是一個 mod_wsgi 問題。

關於如何開始解決此問題的任何想法?

一些使用 C 擴展模組的 Python 第三方包,包括 scipy 和 numpy,只能在 Python 主解釋器中工作,不能在子解釋器中使用,因為 mod_wsgi 預設使用。結果可能是執行緒死鎖、不正確的行為或程序崩潰。這些在以下內容中有詳細說明:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

解決方法是強制 WSGI 應用程序在程序的主解釋器中執行,使用:

WSGIApplicationGroup %{GLOBAL}

如果在同一台伺服器上執行多個 WSGI 應用程序,您可能希望開始使用守護程序模式進行調查,因為某些框架不允許多個實例在同一個解釋器中執行。Django就是這種情況。因此使用守護程序模式,這樣每個程序都在自己的程序中,並強制每個程序在各自的守護程序模式程序組的主解釋器中執行。

引用自:https://serverfault.com/questions/514242