Отмените все асинхронные задачи / цикл disord py - PullRequest
0 голосов
/ 04 мая 2020

У меня есть диск-бот, в котором постоянно работает около 8 циклов. Иногда эти циклы останавливаются без видимой причины (ie Я не вижу исключений).

Я слышал, что лучший способ "перезапустить" эти циклы - выгрузить и загрузить Cog, содержащий петли, которые можно сделать с помощью self.bot.reload_extension(cog). У меня есть это, но, очевидно, перезагрузка расширения не останавливает какие-либо циклы выполнения, что означает, что мой бот теперь делает каждый l oop дважды.

Мне нужно перезапустить задачи, и я искал, как это сделать, но не добился успеха. Вот что у меня есть (от https://docs.python.org/3/library/asyncio-task.html#asyncio .Task.cancel ):

Если я go через эту функцию, он найдет все задачи и дважды нажмет на отмену, жди дважды, но потом остановись. Больше никаких циклов не будет обработано, никаких ошибок не будет.

    async def CancelLoops(self):
        tasks = asyncio.Task.all_tasks()
        for task in asyncio.Task.all_tasks():
            task.cancel()      
            try:
                await task
            except asyncio.CancelledError:
                print("Cancelled now")                       
...