No se puede programar nada en asyncio. (Python 3.7.x)

Nov 11 2020

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

2 Paul Nov 11 2020 at 21:17

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