ascencis call_later löst das 'generator'-Objekt aus und kann nicht mit dem Coroutine-Objekt aufgerufen werden

8

Ich habe einige einfache Code-Code mit Python 3.4 ascencio mit call_later gemacht. Der Code sollte drucken, 10 Sekunden warten und dann erneut drucken (erhöht jedoch TypeError , wenn end() ausgeführt werden sollte, siehe unten):

%Vor%

Gibt den Fehler:

%Vor%

Was ich an den Dokumenten erkennen kann ( Ссылка ), call_later nimmt ein Coroutinobjekt, das durch Aufruf einer Coroutinenfunktion erhalten wird. Dies scheint das zu sein, was ich gemacht habe, aber asyncio ruft end() nicht richtig auf.

Wie soll das gemacht werden?

    
Nathanael Farley 30.11.2015, 17:02
quelle

1 Antwort

7

call_later ist so konzipiert, dass ein Callback (dh ein normales Funktionsobjekt) und keine Coroutine ausgeführt wird. Neuere Versionen von Python werden dies explizit sagen:

%Vor%

Damit Ihr Code funktioniert, muss end eine reguläre Funktion sein, die Sie dann an call_later :

übergeben %Vor%

Ausgabe:

%Vor%

Wenn end eine Coroutine sein muss, wäre es natürlicher, sie nach einer Verzögerung aufzurufen: asyncio.sleep :

%Vor%

Obwohl das technisch funktioniert, funktioniert das:

%Vor%     
dano 30.11.2015, 17:06
quelle

Tags und Links