Impossibile programmare nulla in asyncio. (Python 3.7.x)
Attualmente sto lavorando su asyncio con python 3.7.x non sono sicuro della versione esatta, in questo momento sto cercando di pianificare un'attività. E non sono in grado di ottenere un output, anche quando la cosa viene eseguita per sempre. Ecco il codice che ho attualmente
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))
Questo dà il seguente errore:
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 richiamata call_later()è print_now che ho provato solo print_nowe print_now()ho anche provato a usare loop.run_forever()invece di loop.run_until_complete() e finora non ho ottenuto nulla
A volte non ottengo alcun output o un errore diverso.
Risposte
Primo, sì, ti stai perdendo un delayargomento. Il primo dovrebbe essere il ritardo mentre il secondo è una richiamata ( documenti ).
loop.call_later(delay, callback, *args, context=None)
Secondo, il callback dovrebbe essere una funzione. Quello che stai passando è quello print_now()che valuterà None. Potresti scoprirlo
L'oggetto "NoneType" non è richiamabile
Quindi dovrai passare print_now- senza parentesi - come richiamo. In questo modo stai passando una funzione invece del risultato della sua applicazione.
Terzo, le asyncfunzioni dovrebbero essere modificate await. Il tuo scenario non sembra averne bisogno, quindi rilascia la asyncparola chiave.
Quando chiami una funzione attesa, crei un nuovo oggetto coroutine. Il codice all'interno della funzione non verrà eseguito fino a quando non attendi sulla funzione o la esegui come attività
Da questo post . Potresti voler controllare