UnisKB/apps/common/management/commands/gunicorn.py

46 lines
2.0 KiB
Python
Raw Normal View History

2024-07-19 10:23:56 +00:00
# coding=utf-8
"""
@project: MaxKB
@Author
@file gunicorn.py
@date2024/7/19 17:43
@desc:
"""
import os
import subprocess
from django.core.management.base import BaseCommand
from smartdoc.const import BASE_DIR
class Command(BaseCommand):
help = 'My custom command'
# 参数设定
def add_arguments(self, parser):
parser.add_argument('-b', nargs='+', type=str, help="端口:0.0.0.0:8080") # 0.0.0.0:8080
parser.add_argument('-k', nargs='?', type=str,
help="workers处理器:uvicorn.workers.UvicornWorker") # uvicorn.workers.UvicornWorker
parser.add_argument('-w', action='append', type=str, help='worker 数量') # worker 数量
parser.add_argument('--max-requests', action='append', type=str, help="最大请求") # 10240
parser.add_argument('--max-requests-jitter', action='append', type=str)
parser.add_argument('--access-logformat', action='append', type=str) # %(h)s %(t)s %(L)ss "%(r)s" %(s)s %(b)s
def handle(self, *args, **options):
log_format = '%(h)s %(t)s %(L)ss "%(r)s" %(s)s %(b)s '
cmd = [
2024-07-19 13:34:17 +00:00
'gunicorn', 'smartdoc.wsgi:application',
2024-07-19 10:23:56 +00:00
'-b', options.get('b') if options.get('b') is not None else '0.0.0.0:8080',
2024-07-19 13:34:17 +00:00
'-k', options.get('k') if options.get('k') is not None else 'gunicorn.workers.sync.SyncWorker',
'-w', options.get('w') if options.get('w') is not None else '1',
2024-07-19 10:23:56 +00:00
'--max-requests', options.get('max_requests') if options.get('max_requests') is not None else '10240',
'--max-requests-jitter',
options.get('max_requests_jitter') if options.get('max_requests_jitter') is not None else '2048',
'--access-logformat',
options.get('access_logformat') if options.get('access_logformat') is not None else log_format,
'--access-logfile', '-'
]
kwargs = {'cwd': BASE_DIR}
subprocess.run(cmd, **kwargs)