Невозможно запланировать что-либо в asyncio. (Python 3.7.x)
В настоящее время я работаю над asyncio с python 3.7.x, не уверен в точной версии, прямо сейчас я пытаюсь запланировать задачу. И я не могу получить результат, даже когда я запускаю это навсегда. Вот код, который у меня сейчас есть
import asyncio
async def print_now():
print("Hi there")
loop = asyncio.get_event_loop()
loop.call_later(print_now())
loop.run_until_complete(asyncio.sleep(1))
Это дает следующую ошибку:
Traceback (most recent call last):
File "D:\Coding\python\async\main.py", line 7, in <module>
loop.call_later(print_now())
TypeError: call_later() missing 1 required positional argument: 'callback'
Обратный звонок call_later()- print_now я просто пробовал, print_nowа print_now()также пробовал использовать loop.run_forever()вместо, loop.run_until_complete() и пока ничего не получил
Иногда я получаю либо отсутствие вывода, либо другую ошибку.
Ответы
Во-первых, да, вы упускаете delayаргумент. Первый должен быть задержкой, а второй - обратным вызовом ( документы ).
loop.call_later(delay, callback, *args, context=None)
Во-вторых, обратный вызов должен быть функцией. То, что вы проходите print_now(), будет оценивать None. Вы можете узнать, что
Объект 'NoneType' не вызывается
Итак, вам нужно передать print_now- без скобок - как обратный вызов. Таким образом, вы передаете функцию вместо результата ее применения.
В-третьих, asyncфункции должны быть включены await. Похоже, вашему сценарию это не нужно, поэтому просто опустите asyncключевое слово.
Когда вы вызываете ожидающую функцию, вы создаете новый объект сопрограммы. Код внутри функции не запустится, пока вы не дождетесь выполнения функции или не запустите ее как задачу.
Из этого поста . Вы можете захотеть проверить