From 1df333bffcfcaaea83104614fc347aa6fa09c3ac Mon Sep 17 00:00:00 2001 From: CaptainB Date: Mon, 21 Jul 2025 15:44:54 +0800 Subject: [PATCH] refactor: reorganize post handler and introduce post scheduler handler --- .../management/commands/services/command.py | 10 +++- .../commands/services/services/__init__.py | 3 +- .../commands/services/services/gunicorn.py | 14 ----- .../commands/services/services/scheduler.py | 51 +++++++++++++++++++ apps/maxkb/wsgi.py | 17 ++++--- 5 files changed, 72 insertions(+), 23 deletions(-) create mode 100644 apps/common/management/commands/services/services/scheduler.py diff --git a/apps/common/management/commands/services/command.py b/apps/common/management/commands/services/command.py index 0c97d4af3..d36515dfe 100644 --- a/apps/common/management/commands/services/command.py +++ b/apps/common/management/commands/services/command.py @@ -12,6 +12,7 @@ class Services(TextChoices): gunicorn = 'gunicorn', 'gunicorn' celery_default = 'celery_default', 'celery_default' local_model = 'local_model', 'local_model' + scheduler = 'scheduler', 'scheduler' web = 'web', 'web' celery = 'celery', 'celery' celery_model = 'celery_model', 'celery_model' @@ -24,7 +25,8 @@ class Services(TextChoices): services_map = { cls.gunicorn.value: services.GunicornService, cls.celery_default: services.CeleryDefaultService, - cls.local_model: services.GunicornLocalModelService + cls.local_model: services.GunicornLocalModelService, + cls.scheduler: services.SchedulerService, } return services_map.get(name) @@ -40,9 +42,13 @@ class Services(TextChoices): def task_services(cls): return cls.celery_services() + @classmethod + def scheduler_services(cls): + return [cls.scheduler] + @classmethod def all_services(cls): - return cls.web_services() + cls.task_services() + return cls.web_services() + cls.task_services() + cls.scheduler_services() @classmethod def export_services_values(cls): diff --git a/apps/common/management/commands/services/services/__init__.py b/apps/common/management/commands/services/services/__init__.py index 102739206..7c6731c25 100644 --- a/apps/common/management/commands/services/services/__init__.py +++ b/apps/common/management/commands/services/services/__init__.py @@ -1,3 +1,4 @@ from .celery_default import * from .gunicorn import * -from .local_model import * \ No newline at end of file +from .local_model import * +from .scheduler import * diff --git a/apps/common/management/commands/services/services/gunicorn.py b/apps/common/management/commands/services/services/gunicorn.py index feeb8a28d..331d1d3ea 100644 --- a/apps/common/management/commands/services/services/gunicorn.py +++ b/apps/common/management/commands/services/services/gunicorn.py @@ -1,5 +1,3 @@ -import subprocess - from .base import BaseService from ..hands import * @@ -37,15 +35,3 @@ class GunicornService(BaseService): @property def cwd(self): return APPS_DIR - - def open_subprocess(self): - # 复制当前环境变量,并设置 ENABLE_SCHEDULER=1 - env = os.environ.copy() - env['ENABLE_SCHEDULER'] = '1' - kwargs = { - 'cwd': self.cwd, - 'stderr': self.log_file, - 'stdout': self.log_file, - 'env': env - } - self._process = subprocess.Popen(self.cmd, **kwargs) \ No newline at end of file diff --git a/apps/common/management/commands/services/services/scheduler.py b/apps/common/management/commands/services/services/scheduler.py new file mode 100644 index 000000000..e9a0bd97a --- /dev/null +++ b/apps/common/management/commands/services/services/scheduler.py @@ -0,0 +1,51 @@ +import subprocess + +from .base import BaseService +from ..hands import * + +__all__ = ['SchedulerService'] + + +class SchedulerService(BaseService): + + def __init__(self, **kwargs): + self.worker = 1 + super().__init__(**kwargs) + + @property + def cmd(self): + print("\n- Start Scheduler Server") + + log_format = '%(h)s %(t)s %(L)ss "%(r)s" %(s)s %(b)s ' + bind = f'127.0.0.1:6060' + cmd = [ + 'gunicorn', 'maxkb.wsgi:application', + '-b', bind, + '-k', 'gthread', + '--threads', '200', + '-w', str(self.worker), + '--max-requests', '10240', + '--max-requests-jitter', '2048', + '--access-logformat', log_format, + '--access-logfile', '/dev/null', + '--error-logfile', '-' + ] + if DEBUG: + cmd.append('--reload') + return cmd + + @property + def cwd(self): + return APPS_DIR + + def open_subprocess(self): + # 复制当前环境变量,并设置 ENABLE_SCHEDULER=1 + env = os.environ.copy() + env['ENABLE_SCHEDULER'] = '1' + kwargs = { + 'cwd': self.cwd, + 'stderr': self.log_file, + 'stdout': self.log_file, + 'env': env + } + self._process = subprocess.Popen(self.cmd, **kwargs) \ No newline at end of file diff --git a/apps/maxkb/wsgi.py b/apps/maxkb/wsgi.py index 9b361a669..fc271a7c3 100644 --- a/apps/maxkb/wsgi.py +++ b/apps/maxkb/wsgi.py @@ -19,15 +19,20 @@ application = get_wsgi_application() def post_handler(): from common.database_model_manage.database_model_manage import DatabaseModelManage - from common import job from common import event event.run() - job.run() DatabaseModelManage.init() -# 仅在web中启动定时任务,local_model celery 不需要 + +def post_scheduler_handler(): + from common import job + + job.run() + +# 启动后处理函数 +post_handler() + +# 仅在scheduler中启动定时任务,dev local_model celery 不需要 if os.environ.get('ENABLE_SCHEDULER') == '1': - post_handler() - - + post_scheduler_handler()