def begin(self, coro: Optional[Awaitable[Any]] = None) -> None: """ start userge """ loop = asyncio.get_event_loop() loop.add_signal_handler(signal.SIGHUP, _shutdown) loop.add_signal_handler(signal.SIGTERM, _shutdown) run = loop.run_until_complete try: run(self.start()) running_tasks: List[asyncio.Task] = [] for task in self._tasks: running_tasks.append(loop.create_task(task())) if coro: _LOG.info(_LOG_STR, "Running Coroutine") run(coro) else: _LOG.info(_LOG_STR, "Idling USERGE-X") logbot.edit_last_msg("USERGE-X has Started Successfully !") logbot.end() idle() _LOG.info(_LOG_STR, "Exiting USERGE-X") for task in running_tasks: task.cancel() run(self.stop()) run(loop.shutdown_asyncgens()) except asyncio.exceptions.CancelledError: pass finally: if not loop.is_running(): loop.close()
def begin(self, coro: Optional[Awaitable[Any]] = None) -> None: """ start userge """ lock = asyncio.Lock() running_tasks: List[asyncio.Task] = [] async def _finalize() -> None: async with lock: for t in running_tasks: t.cancel() if self.is_initialized: await self.stop() else: _close_db() pool._stop() # pylint: disable=protected-access # pylint: disable=expression-not-assigned [ t.cancel() for t in asyncio.all_tasks() if t is not asyncio.current_task() ] await self.loop.shutdown_asyncgens() self.loop.stop() _LOG.info(_LOG_STR, "Loop Stopped !") async def _shutdown(_sig: signal.Signals) -> None: global _SEND_SIGNAL # pylint: disable=global-statement _LOG.info( _LOG_STR, f"Received Stop Signal [{_sig.name}], Exiting Userge ...") await _finalize() if _sig == _sig.SIGUSR1: _SEND_SIGNAL = True for sig in (signal.SIGHUP, signal.SIGTERM, signal.SIGINT, signal.SIGUSR1): self.loop.add_signal_handler( sig, lambda _sig=sig: self.loop.create_task(_shutdown(_sig))) self.loop.run_until_complete(self.start()) for task in self._tasks: running_tasks.append(self.loop.create_task(task())) logbot.edit_last_msg("Userge has Started Successfully !") logbot.end() mode = "[DUAL]" if RawClient.DUAL_MODE else "[BOT]" if Config.BOT_TOKEN else "[USER]" try: if coro: _LOG.info(_LOG_STR, f"Running Coroutine - {mode}") self.loop.run_until_complete(coro) else: _LOG.info(_LOG_STR, f"Idling Userge - {mode}") idle() self.loop.run_until_complete(_finalize()) except (asyncio.exceptions.CancelledError, RuntimeError): pass finally: self.loop.close() _LOG.info(_LOG_STR, "Loop Closed !") if _SEND_SIGNAL: os.kill(os.getpid(), signal.SIGUSR1)
def begin(self, coro: Optional[Awaitable[Any]] = None) -> None: """ start USERGE-X """ lock = asyncio.Lock() running_tasks: List[asyncio.Task] = [] async def _finalize() -> None: async with lock: for task in running_tasks: task.cancel() if self.is_initialized: await self.stop() # pylint: disable=expression-not-assigned [ t.cancel() for t in asyncio.all_tasks() if t is not asyncio.current_task() ] await self.loop.shutdown_asyncgens() self.loop.stop() _LOG.info(_LOG_STR, "Loop Stopped !") async def _shutdown(sig: signal.Signals) -> None: _LOG.info( _LOG_STR, f"Received Stop Signal [{sig.name}], Exiting USERGE-X ...") await _finalize() for sig in (signal.SIGHUP, signal.SIGTERM, signal.SIGINT): self.loop.add_signal_handler( sig, lambda sig=sig: self.loop.create_task(_shutdown(sig))) self.loop.run_until_complete(self.start()) for task in self._tasks: running_tasks.append(self.loop.create_task(task())) logbot.edit_last_msg("USERGE-X has Started Successfully !") logbot.end() try: if coro: _LOG.info(_LOG_STR, "Running Coroutine") self.loop.run_until_complete(coro) else: _LOG.info(_LOG_STR, "Idling USERGE-X") idle() self.loop.run_until_complete(_finalize()) except (asyncio.exceptions.CancelledError, RuntimeError): pass finally: self.loop.close() _LOG.info(_LOG_STR, "Loop Closed !")
def begin(self, coro: Optional[Awaitable[Any]] = None) -> None: """ start userge """ loop = asyncio.get_event_loop() run = loop.run_until_complete run(self.start()) running_tasks: List[asyncio.Task] = [] for task in self._tasks: running_tasks.append(loop.create_task(task())) if coro: _LOG.info(_LOG_STR, "Running Coroutine") run(coro) else: _LOG.info(_LOG_STR, "Idling Userge") logbot.edit_last_msg("Userge has Started Successfully !") logbot.end() idle() _LOG.info(_LOG_STR, "Exiting Userge") for task in running_tasks: task.cancel() run(self.stop()) run(loop.shutdown_asyncgens()) loop.close()