In Asyncio kann nichts geplant werden. (Python 3.7.x)

Nov 11 2020

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

2 Paul Nov 11 2020 at 21:17

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