33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
import asyncio
|
|
from serverside.consts import logger, executor, running_tasks
|
|
|
|
async def run_in_thread(name, func, *args, **kwargs):
|
|
loop = asyncio.get_event_loop()
|
|
try:
|
|
await loop.run_in_executor(executor, func, *args, **kwargs)
|
|
except asyncio.CancelledError:
|
|
logger.info(f"{name} task cancelled.")
|
|
raise
|
|
except Exception as e:
|
|
logger.error(f"Error in {name}: {e}")
|
|
|
|
async def stop_task(name):
|
|
task = running_tasks.get(name)
|
|
if task:
|
|
task.cancel()
|
|
try:
|
|
await task
|
|
except asyncio.CancelledError:
|
|
logger.info(f"{name} task stopped.")
|
|
running_tasks.pop(name, None)
|
|
except Exception as e:
|
|
logger.error(f"Error stopping {name} task: {e}")
|
|
|
|
async def stop_all():
|
|
logger.info("Stopping all services...")
|
|
for _, task in running_tasks.items():
|
|
task.cancel()
|
|
await asyncio.gather(*running_tasks.values(), return_exceptions=True)
|
|
running_tasks.clear()
|
|
logger.info("All services stopped.")
|