Tidak dapat menjadwalkan apa pun di asyncio. (Python 3.7.x)

Nov 11 2020

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

2 Paul Nov 11 2020 at 21:17

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