No se puede programar nada en asyncio. (Python 3.7.x)
Actualmente estoy trabajando en asyncio con python 3.7.x, no estoy seguro de la versión exacta, en este momento estoy tratando de programar una tarea. Y no puedo obtener un resultado, incluso cuando lo ejecuto para siempre. Aquí está el código que tengo actualmente
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))
Esto da el siguiente error:
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'
La llamada de regreso call_later()es print_now que lo intenté print_nowy print_now()también intenté usar en loop.run_forever()lugar de loop.run_until_complete() y hasta ahora no obtuve nada
A veces no obtengo ningún resultado o un error diferente.
Respuestas
Primero, sí, te estás perdiendo un delayargumento. Se supone que el primero es el retraso, mientras que el segundo es una devolución de llamada ( documentos ).
loop.call_later(delay, callback, *args, context=None)
En segundo lugar, se supone que la devolución de llamada es una función. Lo que estás pasando es a print_now()cuál se va a evaluar None. Podrías descubrir que
El objeto 'NoneType' no es invocable
Así que tendrás que pasar print_now, sin paréntesis, como devolución de llamada. De esta forma, está pasando una función en lugar del resultado de su aplicación.
En tercer lugar, asyncse supone que las funciones están activadas await. Su escenario no parece necesitar eso, así que simplemente suelte la asyncpalabra clave.
Cuando llama a una función en espera, crea un nuevo objeto de rutina. El código dentro de la función no se ejecutará hasta que espere la función o la ejecute como una tarea
De esta publicación . Es posible que desee comprobar