Incapaz de agendar nada em assíncio. (Python 3.7.x)
Atualmente estou trabalhando em asyncio com python 3.7.x não tenho certeza sobre a versão exata, agora estou tentando agendar uma tarefa. E não consigo obter uma saída, mesmo quando estou executando a coisa indefinidamente. Aqui está o código que tenho atualmente
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))
Isso dá o seguinte erro:
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'
A chamada de volta call_later()é print_now que eu tentei print_nowe print_now()também tentei usar em loop.run_forever()vez de loop.run_until_complete() e até agora não recebi nada
Às vezes, não recebo nenhuma saída ou recebo um erro diferente.
Respostas
Primeiro, sim, você está perdendo um delayargumento. O primeiro deve ser o atraso, enquanto o segundo é um retorno de chamada ( docs ).
loop.call_later(delay, callback, *args, context=None)
Em segundo lugar, o retorno de chamada deve ser uma função. O que você está passando é o print_now()que vai avaliar None. Você pode descobrir que
O objeto 'NoneType' não pode ser chamado
Então você vai precisar passar print_now- sem parênteses - como um retorno de chamada. Desta forma, você está passando uma função em vez do resultado de sua aplicação.
Terceiro, as asyncfunções devem ser awaiteditadas. Seu cenário não parece precisar disso, portanto, basta largar a asyncpalavra - chave.
Ao chamar uma função em espera, você cria um novo objeto de co-rotina. O código dentro da função não será executado até que você aguarde a função ou execute-a como uma tarefa
A partir deste post . Você pode querer verificar