Есть ли способ передать значения опций во время запуска сервера mod_wsgi в приложении Django

Я использую mod_wsgi для запуска моего приложения Django. Поскольку существует огромное количество опций, которые необходимо определить при выполнении команды запуска сервера, я пытался создать некий скрипт на python для передачи опций и их предварительно установленных значений.

Например:

Вместо использования:

$python3 manage.py runmodwsgi --processes 3 --threads 1

Я пытаюсь использовать скрипт python и использовать его как:

$python3 runme.py

где runme.py - файл сценария, который я пытаюсь использовать для запуска сервера.

Что я сделал до сих пор?

Создали файл сценария:

import os
from django.core.management import execute_from_command_line

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
myargs = 'runmodwsgi'
list_of_args = ['', myargs]
execute_from_command_line(list_of_args)

Как и ожидалось, сервер запустился с предустановленными опциями, например:

enter image description here

Теперь то, чего я пытаюсь достичь, это передать значения определенных опций, например:

--processes 3 --threads 1

и так далее.

Есть ли способ передать предустановленные значения (которые я могу определить в файле скрипта runme.py), скажем, что-то вроде добавления в список аргументов:

list_of_args = ['', myargs, addl_args]

Я проверил SO запросы, размещенные в дополнение к помощи, доступной на сайте python, но не смог разобраться с проблемой.

Я попробовал следующее, что, однако, не очень помогло:

import os
import argparse # New import
from django.core.management import execute_from_command_line

# Addition of new code lines
parser = argparse.ArgumentParser()

group = parser.add_mutually_exclusive_group()
group.add_argument("-p", "--processes", action="store_true")
group.add_argument("-t", "--threads", action="store_true")
parser.add_argument("pint", type=int, help="no. of processes")
parser.add_argument("tint", type=int, help="no. of threads")

args = parser.parse_args()
# End of new code

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
myargs = 'runmodwsgi'

# At this line if I add ", args" (like shown below:])
list_of_args = ['', myargs, args] 
execute_from_command_line(list_of_args)

и запускаем команду, появляется ошибка:

TypeError: 'Namespace' object does not support indexing

Если я просто запускаю: python3 runme.py, я получаю следующую ошибку:

usage: runme.py [-h] [-p | -t] pint tint
runme.py: error: the following arguments are required: pint, tint

Здесь, используя

python3 runme.py 3 1

запускает сервер, но опции целых чисел "3" и "1" не имеют никакого эффекта (как и предназначено для количества процессов и потоков).

Если я использую:

python3 runme.py --processes 3 --threads 1

Я получаю следующую ошибку:

usage: runme.py [-h] [-p | -t] pint tint
runme.py: error: argument -t/--threads: not allowed with argument -p/--processes

Пробовал с одним аргументом, например:

python3 runme.py --processes 3 1

Сервер запускается в это время, но на значение опций/ов это не влияет.

Как определить значения опций и передать эти заданные значения опций команде run?

Похоже, что вы просто неправильно понимаете/неправильно используете argparse.

import os
import sys
import argparse

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--processes", type=int, default=1)
parser.add_argument("-t", "--threads", type=int, default=1)
args = parser.parse_args()
from django.core.management import execute_from_command_line

command = [sys.argv[0], 'runmodwsgi', '--processes', str(args.processes), '--threads', str(args.threads)]
execute_from_command_line(command)

может быть ближе к тому, что вы хотите; он будет устанавливать по умолчанию процессы и потоки на 1.

Вернуться на верх