gpt4 book ai didi

python - 运行多个 uwsgi python 版本

转载 作者:太空狗 更新时间:2023-10-29 21:01:02 25 4
gpt4 key购买 nike

我正在尝试使用 uwsgi 部署 django,但我认为我对它的工作原理缺乏了解。我让 uwsgi 在 emperor 模式下运行,我试图让 vassals 在他们自己的 virtualenvs 中运行,使用不同的 python 版本。

皇帝配置:

[uwsgi]
socket = /run/uwsgi/uwsgi.socket
pidfile = /run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi.d
emperor-tyrant = true
master = true
autoload = true
log-date = true
logto = /var/log/uwsgi/uwsgi-emperor.log

还有封臣:

uid=django
gid=django
virtualenv=/home/django/sites/mysite/venv/bin
chdir=/home/django/sites/mysite/site
module=mysite.uwsgi:application
socket=/tmp/uwsgi_mysite.sock
master=True

我在 emperor 日志中看到以下错误:

Traceback (most recent call last):
File "./mysite/uwsgi.py", line 11, in <module>
import site
ImportError: No module named site

我网站的 virtualenv 是作为 python 3.4 pyvenv 创建的。 uwsgi是系统uwsgi(python2.6)。我的印象是 emperor 可以是任何 python 版本,因为 vassal 将使用自己的 python 和环境启动,由 master 进程启动。我现在认为这是错误的。

我想做的是使用系统 python 运行 uwsgi 主进程,但是各种 vassal(应用程序)使用它们自己的 python 和它们自己的库。这可能吗?或者如果我想运行多个 python,我将不得不运行多个 emperors 吗?有点违背了拥有虚拟环境的目的。

最佳答案

“优雅”的方式是将 uWSGI python 支持构建为插件,并为每个 python 版本提供一个插件:

(来自 uWSGI 来源)

make PROFILE=nolang

(将构建一个没有语言支持的 uWSGI 二进制文件)

PYTHON=python2.7 ./uwsgi --build-plugin "plugins/python python27"

将构建您可以在 vassal 中加载的 python27_plugin.so

PYTHON=python3 ./uwsgi --build-plugin "plugins/python python3"

将为 python3 等构建插件。

有多种构建 uWSGI 插件的方法,我报告的方法是最安全的(它确保 #ifdef 得到尊重)。

话虽如此,每个 python 版本都有一个 uWSGI Emperor 也是可行的。请记住,皇帝是可堆叠的,因此您可以让一个通用皇帝为每个 Python 版本生成一个皇帝(作为其附庸)。

关于python - 运行多个 uwsgi python 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23872801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com