mirror of
https://github.com/openmax-server/server.git
synced 2026-05-25 21:11:41 +03:00
Решение проблемы обработки sigterm
This commit is contained in:
21
src/main.py
21
src/main.py
@@ -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__":
|
||||||
|
|||||||
@@ -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}")
|
||||||
|
|
||||||
|
try:
|
||||||
await self.server.wait_closed()
|
await self.server.wait_closed()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
self.server.close()
|
||||||
|
await self.server.wait_closed()
|
||||||
|
raise
|
||||||
@@ -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}")
|
||||||
|
|
||||||
|
try:
|
||||||
await self.server.wait_closed()
|
await self.server.wait_closed()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
self.server.close()
|
||||||
|
await self.server.wait_closed()
|
||||||
|
raise
|
||||||
Reference in New Issue
Block a user