From 35f2c0453525df4281a3e0711b92f5f4c9a12cc3 Mon Sep 17 00:00:00 2001 From: glide-the <2533736852@qq.com> Date: Mon, 4 Sep 2023 23:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=BF=9B=E7=A8=8B=E6=94=BE?= =?UTF-8?q?=E5=85=A5=20try=20catch=20=E4=BF=9D=E8=AF=81=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=94=B6=E5=88=B0SIGINT=E5=90=8E=EF=BC=8C=E8=83=BD=E5=A4=9F?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E9=80=80=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- startup.py | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/startup.py b/startup.py index 9766480..4c52f46 100644 --- a/startup.py +++ b/startup.py @@ -565,9 +565,7 @@ async def start_main_server(): args=(queue, process_count() + 1, log_level), daemon=True, ) - process.start() - # 使用await asyncio.sleep(3)可以让后续代码等待一段时间 - await asyncio.sleep(3) + processes["controller"] = process process = Process( @@ -576,7 +574,6 @@ async def start_main_server(): args=(queue, process_count() + 1), daemon=True, ) - process.start() processes["openai_api"] = process if args.model_worker: @@ -588,7 +585,7 @@ async def start_main_server(): args=(args.model_name, args.controller_address, queue, process_count() + 1, log_level), daemon=True, ) - process.start() + processes["model_worker"] = process if args.api_worker: @@ -601,7 +598,7 @@ async def start_main_server(): args=(model_name, args.controller_address, queue, process_count() + 1, log_level), daemon=True, ) - process.start() + processes["online-api"].append(process) if args.api: @@ -611,7 +608,7 @@ async def start_main_server(): args=(queue, process_count() + 1), daemon=True, ) - process.start() + processes["api"] = process if args.webui: @@ -621,13 +618,26 @@ async def start_main_server(): args=(queue, process_count() + 1), daemon=True, ) - process.start() + processes["webui"] = process if process_count() == 0: parser.print_help() else: try: + # 保证任务收到SIGINT后,能够正常退出 + processes["controller"].start() + # 使用await asyncio.sleep(3)可以让后续代码等待一段时间 + await asyncio.sleep(3) + + processes["openai_api"].start() + processes["model_worker"].start() + for p in processes["online-api"]: + p.start() + + processes["api"].start() + processes["webui"].start() + while True: no = queue.get() if no == process_count(): @@ -652,16 +662,19 @@ async def start_main_server(): # model_worker_process.terminate() # for process in processes.pop("online-api", []): # process.terminate() - # for name, process in processes.items(): - # process.terminate() + # for process in processes.values(): + # + # if isinstance(process, list): + # for work_process in process: + # work_process.terminate() + # else: + # process.terminate() logger.warning("Caught KeyboardInterrupt! Setting stop event...") finally: # Send SIGINT if process doesn't exit quickly enough, and kill it as last resort # .is_alive() also implicitly joins the process (good practice in linux) # while alive_procs := [p for p in processes.values() if p.is_alive()]: - for p in processes.values(): - logger.info("Process status: %s", p) for p in processes.values(): logger.warning("Sending SIGKILL to %s", p) # Queues and other inter-process communication primitives can break when @@ -674,7 +687,6 @@ async def start_main_server(): else: p.kill() - sleep(.01) for p in processes.values(): logger.info("Process status: %s", p)