У меня есть диск-бот, в котором постоянно работает около 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")