Решение проблемы обработки 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 asyncio
import logging import logging
import signal
import ssl import ssl
import sys
from common.config import ServerConfig from common.config import ServerConfig
from common.push import PushService from common.push import PushService
@@ -175,10 +177,25 @@ async def main():
api["telegram_bot"] = controllers["telegrambot"] 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__": if __name__ == "__main__":

View File

@@ -2,6 +2,7 @@ import logging
import time import time
import traceback import traceback
import websockets import websockets
import asyncio
from common.proto_web import WebProto from common.proto_web import WebProto
from oneme.processors import Processors from oneme.processors import Processors
from common.rate_limiter import RateLimiter from common.rate_limiter import RateLimiter
@@ -410,4 +411,9 @@ class OnemeWS:
self.logger.info(f"WebSocket запущен на порту {self.port}") 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 logging
import traceback import traceback
import websockets import websockets
import asyncio
from common.proto_web import WebProto from common.proto_web import WebProto
from tamtam.processors import Processors from tamtam.processors import Processors
from common.rate_limiter import RateLimiter from common.rate_limiter import RateLimiter
@@ -229,4 +230,9 @@ class TamTamWS:
self.logger.info(f"TT WebSocket запущен на порту {self.port}") 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