Apache不断报告运行django WSGI的"python error: not main interpreter"



Apache在docker容器中运行django WSGI。以下是版本:

Apache版本:2.4.6

Python版本:3.10.4

mod_wsgi版本:4.9.0

docker基本图像:centos-7.9.2009

httpd配置:

....
LoadModule wsgi_module ${APP_ROOT_DIR}/common/conf/httpd/mod_wsgi-py310.cpython-310-x86_64-linux-gnu.so
WSGIPythonHome /opt/python-3.10.4
Alias /na/static/ ${APP_ROOT_DIR}/publish/
<Directory ${APP_ROOT_DIR}>
Require all granted
</Directory>
WSGIDaemonProcess portal python-home=/opt/python-3.10.4 processes=1 threads=10 display-name=%{GROUP} umask=027 socket-timeout=600
WSGIScriptAlias /na ${APP_ROOT_DIR}/wsgi.py
<Location /na>
WSGIProcessGroup portal
</Location>
......

连续重复以下文件"httpd-error_log"中的错误:

Extension modules: bson._cbson, pymongo._cmessage, cx_Oracle, pvectorc (total: 4)
Fatal Python error: _PyInterpreterState_DeleteExceptMain: not main interpreter
Python runtime state: initialized
Current thread 0x00007ff9d892d700 (most recent call first):
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/popen_fork.py", line 66 in _launch
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/popen_fork.py", line 19 in __init__
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/context.py", line 277 in _Popen
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/process.py", line 121 in start
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/pool.py", line 326 in _repopulate_pool_static
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/pool.py", line 337 in _maintain_pool
File "/opt/python-3.10.4/lib/python3.10/multiprocessing/pool.py", line 513 in _handle_workers
File "/opt/python-3.10.4/lib/python3.10/threading.py", line 946 in run
File "/opt/python-3.10.4/lib/python3.10/threading.py", line 1009 in _bootstrap_inner
File "/opt/python-3.10.4/lib/python3.10/threading.py", line 966 in _bootstrap

答案来自:https://githubhot.com/repo/GrahamDumpleton/mod_wsgi/issues/750

第一个建议更改是不使用:

WSGIDaemonProcess ${url} user=${project-user} group=${project-group} python-path=${RootPath}/web/${url}/ python-home=${RootPath}/web/envs/${venv} display-name=${project} processes=3 threads=100 request-timeout=600
WSGIProcessGroup ${url}
WSGIScriptAlias / ${RootPath}/web/${url}/${app}/wsgi.py process-group=${url}

用途:

WSGIDaemonProcess ${url} user=${project-user} group=${project-group} python-path=${RootPath}/web/${url}/ python-home=${RootPath}/web/envs/${venv} display-name=${project} processes=3 threads=10 request-timeout=600
WSGIScriptAlias / ${RootPath}/web/${url}/${app}/wsgi.py process-group=${url} application-group=%{GLOBAL}

此外,在所有VirtualHost配置之外添加:

WSGIRestrictEmbedded On

这将禁止在没有使用Python的Apache子进程中初始化Python。

关于mod_wsgi-express,您可以通过查看它是如何配置的来了解一些东西,因为它已经调整为在Apache下很好地适用于Python wsgi应用程序。如果你还没有,建议观看:

https://www.youtube.com/watch?v=H6Q3l11fjU0

最新更新