Запуск нескольких версий uwsgi python

Я пытаюсь развернуть django с uwsgi, и я думаю, что мне не хватает понимания того, как все это работает. У меня uwsgi работает в императорском режиме, и я пытаюсь заставить вассалов работать в их собственных 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

Я вижу следующую ошибку в журнале императора:

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). У меня сложилось впечатление, что императором может быть любая версия python, так как вассал будет запущен со своим собственным python и средой, запущенной мастер-процессом. Теперь я думаю, что это неправильно.

то, что я хотел бы сделать, это запустить мастер-процесс uwsgi с системным python, но различные вассалы (приложения) со своим собственным python и своими собственными библиотеками. Возможно ли это? Или мне придется управлять несколькими императорами? если я хочу запустить несколько питонов? Своего рода побеждает цель наличия виртуальных сред.

1 ответов


"элегантный" способ строит поддержку uwsgi python в качестве плагина и имеет плагин для каждой версии python:

(из источников uWSGI)

make PROFILE=nolang

(построит двоичный файл uWSGI без языковой поддержки)

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

построить python27_plugin.so что вы можете загрузить в холопстве

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

построит плагин для python3 и так далее.

существуют различные способы создания плагинов uWSGI, тот, который я сообщаю, является самым безопасным (это гарантирует #ifdef большая честь).

сказав это, наличие императора uWSGI для каждой версии python также жизнеспособно. Помните, что император штабелируется, поэтому у вас может быть общий император, порождающий одного императора (как его вассала) для каждой версии python.