Решение проблемы обработки sigterm

This commit is contained in:
Alexey Polyakov
2026-05-06 15:25:07 +03:00
parent 0f2d946b98
commit 613e1b96cd
3 changed files with 33 additions and 4 deletions

View File

@@ -1,7 +1,9 @@
# Импортирование библиотек
import asyncio
import logging
import signal
import ssl
import sys
from common.config import ServerConfig
from common.push import PushService
@@ -175,10 +177,25 @@ async def main():
api["telegram_bot"] = controllers["telegrambot"]
tasks = [controller.launch(api) for controller in controllers.values()]
coros = [controller.launch(api) for controller in controllers.values()]
running_tasks = [asyncio.create_task(coro) for coro in coros]
# Обработчик sigterm
loop = asyncio.get_running_loop()
def _shutdown(sig):
for task in running_tasks:
task.cancel()
if sys.platform != "win32":
for sig in (signal.SIGTERM, signal.SIGINT):
loop.add_signal_handler(sig, _shutdown, sig)
# Запускаем контроллеры
await asyncio.gather(*tasks)
try:
await asyncio.gather(*running_tasks)
except asyncio.CancelledError:
logging.info("Все задачи завершены, выходим")
if __name__ == "__main__":

View File

@@ -2,6 +2,7 @@ import logging
import time
import traceback
import websockets
import asyncio
from common.proto_web import WebProto
from oneme.processors import Processors
from common.rate_limiter import RateLimiter
@@ -410,4 +411,9 @@ class OnemeWS:
self.logger.info(f"WebSocket запущен на порту {self.port}")
await self.server.wait_closed()
try:
await self.server.wait_closed()
except asyncio.CancelledError:
self.server.close()
await self.server.wait_closed()
raise

View File

@@ -1,6 +1,7 @@
import logging
import traceback
import websockets
import asyncio
from common.proto_web import WebProto
from tamtam.processors import Processors
from common.rate_limiter import RateLimiter
@@ -229,4 +230,9 @@ class TamTamWS:
self.logger.info(f"TT WebSocket запущен на порту {self.port}")
await self.server.wait_closed()
try:
await self.server.wait_closed()
except asyncio.CancelledError:
self.server.close()
await self.server.wait_closed()
raise