Иногда бывает надо запустить gunicorn внутри Python скрипта, например, в manage.py
. Конечно всегда можно воспользоваться subprocess.call
:
import subprocess
app = 'package.module:app'
host, port = '0.0.0.0', 8000
subprocess.call('gunicorn -b {}:{:d} -w 4 {}'.format(host, port, app))
Но как-то это не комильфо подумал я и решил найти более труЪ-способ :)
Решение пришло не сразу, но пришло, надо всего лишь переопределить sys.argv
и вызвать метод run
,
import sys
from gunicorn.app.wsgiapp import run
app = 'package.module:app'
host, port = '0.0.0.0', 8000
sys.argv = [
sys.argv[0],
'-b', '{}:{:d}'.format(host, port),
'-w', '4',
app
]
run()
Не очень круто вышло, не находите? А все потому что gunicorn еще использует устаревший optparse для парсинга аргументов с коммандной строки, а там задавать список аргументов в parse_args
совсем не обязательно, ведь по дефолту берется список sys.argv[1:]
.
Так что на таком простом примере лично мне ясно видно, насколько optparse устарел и как вашему приложению, которое его еще использует надо сломя голову переезжать на argparse! И это я еще не рассказал вам о бесподобном управлении под-коммандами в argparse :)