asyncio create_task manual

Run Settings
LanguagePython
Language Version
Run Command
# В этом гайде мы посмотрим, как задавать программе регулярные задачи без aioschedule. # Сначала нужно создать функцию, которая будет выполняться через равные промежутки времени. # Свою функцию я приводить не буду, потому что у нее очень много зависимостей, которые тогда тоже нужно будет привести) # Назовем нашу функцию check_updates. # Но есть один очень важный момент: после всех значимых строк этой функции обязательно нужно ставить asyncio.sleep, # хотя бы на короткое время, пусть даже на 1 секунду. Это позволит высвободить потоки под новые задачи. # Иначе ваша программа будет непредсказуемо останавливаться и выдавать такую ошибку: """ ERROR:asyncio:Task was destroyed but it is pending! task: <Task pending name='Task-32' coro=<Dispatcher._process_polling_updates() running at C:\Users\...\lib\site-packages\aiogram\dispatcher\dispatcher.py:415> wait_for=<_GatheringFuture pending cb=[Task.task_wakeup()]>> """ # Единственное известное мне решение — asyncio.sleep(1) в конце повторяемой функции. # P.s.: задумалась и поняла, что такая функция не может иметь ключевое слово return, так как тогда интерпретатор просто не дойдет до asyncio.cleep.
# Тепеь нам надо "обернуть" ее в инструкцию для программы: выполнил - подождал - выполнил - подождал. # Вот эту функцию кладем в файл __main__, до функции main: async def timer(wait, bot): while True: await check_updates(bot) await asyncio.sleep(wait) # Аргумент wait тоже необходим. Получается, после каждого повторения подождать нужно целых 2 раза.
# Наконец, эту строчку пишем в функцию main файла __main__ # Думаю, вместо 10 в wait можно передать и время поменьше asyncio.create_task(timer(10, bot)) # Готово! Бот будет выполнять задание каждые 10 (ну, чуть больше) секунд
Editor Settings
Theme
Key bindings
Full width
Lines