Asyncio'da hiçbir şey planlanamıyor. (Python 3.7.x)

Nov 11 2020

Şu anda python 3.7.x ile asyncio üzerinde çalışıyorum, tam sürümden emin değilim, şu anda bir görev planlamaya çalışıyorum. Ve bir şeyi sonsuza kadar çalıştırırken bile bir çıktı alamıyorum. İşte şu anda sahip olduğum kod

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))

Bu, aşağıdaki hatayı verir:

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'

Geri arama call_later(), print_now sadece denedim print_nowve yerine print_now()kullanmayı denedim ve şimdiye kadar hiçbir şey alamadımloop.run_forever()loop.run_until_complete()

Bazen ya hiç çıktı alıyorum ya da farklı bir hata alıyorum.

Yanıtlar

2 Paul Nov 11 2020 at 21:17

Birincisi, evet, bir delaytartışmayı kaçırıyorsunuz . Birincisi gecikme, ikincisi geri arama ( docs ).

loop.call_later(delay, callback, *args, context=None)

İkincisi, geri aramanın bir işlev olması gerekiyor. Geçtiğin şey print_now(), değerlendirecek olan şey None. Bunu öğrenebilirsin

'NoneType' nesnesi çağrılabilir değil

Yani print_nowparantez olmadan geri arama olarak geçmeniz gerekecek . Bu şekilde, uygulamasının sonucu yerine bir işlevi geçirmiş olursunuz.


Üçüncüsü, asyncfonksiyonların awaitüzerine yazılması gerekiyor . Senaryonuzun buna ihtiyacı yok gibi görünüyor, bu yüzden sadece asyncanahtar kelimeyi bırakın .

Beklenebilir bir işlevi çağırdığınızda, yeni bir koroutin nesnesi oluşturursunuz. İşlevin içindeki kod, siz işlevi beklemeden veya bir görev olarak çalıştırana kadar çalışmayacaktır.

Gönderen bu yazı . Kontrol etmek isteyebilirsin