Tidak dapat menjadwalkan apa pun di asyncio. (Python 3.7.x)
Saat ini saya mengerjakan asyncio dengan python 3.7.x tidak yakin tentang versi pastinya, sekarang saya mencoba menjadwalkan tugas. Dan saya tidak bisa mendapatkan hasil, bahkan saat menjalankannya selamanya. Ini kode yang saya miliki saat ini
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))
Ini memberikan kesalahan berikut:
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'
Panggilan kembali call_later()adalah print_now saya telah mencoba print_nowdan print_now()saya juga telah mencoba menggunakan, loop.run_forever()bukan loop.run_until_complete() dan sejauh ini saya tidak mendapatkan apa-apa
Terkadang saya tidak mendapatkan hasil atau kesalahan yang berbeda.
Jawaban
Pertama, ya, Anda melewatkan delayargumen. Yang pertama adalah penundaan sedangkan yang kedua adalah panggilan balik ( docs ).
loop.call_later(delay, callback, *args, context=None)
Kedua, callback seharusnya menjadi sebuah fungsi. Apa yang Anda lewati adalah print_now()yang akan dievaluasi None. Anda mungkin tahu itu
Objek 'NoneType' tidak dapat dipanggil
Jadi, Anda harus meneruskan print_now- tanpa tanda kurung - sebagai panggilan balik. Dengan cara ini Anda meneruskan fungsi alih-alih hasil penerapannya.
Ketiga, asyncfungsi seharusnya terus ditingkatkan await. Skenario Anda sepertinya tidak membutuhkannya, jadi hilangkan saja asynckata kuncinya.
Saat Anda memanggil fungsi awaitable, Anda membuat objek coroutine baru. Kode di dalam fungsi tidak akan berjalan sampai Anda menunggu fungsi tersebut atau menjalankannya sebagai tugas
Dari postingan ini . Anda mungkin ingin memeriksanya