In Asyncio kann nichts geplant werden. (Python 3.7.x)
Ich arbeite derzeit an Asyncio mit Python 3.7.x und bin mir nicht sicher, welche Version genau verfügbar ist. Im Moment versuche ich, eine Aufgabe zu planen. Und ich kann keine Ausgabe erhalten, selbst wenn ich das Ding für immer laufen lasse. Hier ist der Code, den ich derzeit habe
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))
Dies ergibt den folgenden Fehler:
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'
Der Rückruf call_later()ist, dass print_now ich es gerade versucht habe print_nowund print_now()ich habe auch versucht, es loop.run_forever()anstelle von zu verwenden, loop.run_until_complete() und bis jetzt habe ich nichts bekommen
Manchmal bekomme ich entweder keine Ausgabe oder einen anderen Fehler.
Antworten
Erstens fehlt Ihnen ein delayArgument. Der erste soll die Verzögerung sein, während der zweite ein Rückruf ( docs ) ist.
loop.call_later(delay, callback, *args, context=None)
Zweitens soll der Rückruf eine Funktion sein. Was Sie passieren print_now(), wird bewertet None. Das könnten Sie herausfinden
Das Objekt 'NoneType' kann nicht aufgerufen werden
Sie müssen also print_now- ohne Klammern - als Rückruf übergeben. Auf diese Weise übergeben Sie eine Funktion anstelle des Ergebnisses ihrer Anwendung.
Drittens sollen asyncFunktionen bearbeitet werden await. Ihr Szenario scheint das nicht zu benötigen, lassen Sie also einfach das asyncSchlüsselwort fallen.
Wenn Sie eine erwartete Funktion aufrufen, erstellen Sie ein neues Coroutine-Objekt. Der Code in der Funktion wird erst ausgeführt, wenn Sie auf die Funktion warten oder sie als Aufgabe ausführen
Aus diesem Beitrag . Vielleicht möchten Sie auschecken