Ein Python-Programm warten lassen, bis Twisted deferred einen Wert zurückgibt

8

Ich habe ein Programm, das Informationen von anderen Seiten holt und sie mit BeautifulSoup und Twisted's getPage analysiert. Später im Programm drucke ich Informationen, die der verzögerte Prozess erstellt. Momentan versucht mein Programm, es zu drucken, bevor das andere die Informationen zurückgibt. Wie kann ich es warten lassen?

%Vor%     
Jody S 15.08.2010, 19:22
quelle

3 Antworten

8

Wie es scheint, versuchen Sie, mehrere Reaktoren zu bauen / zu betreiben. Alles wird an den selben Reaktor angeschlossen. Hier erfahren Sie, wie Sie mit DeferredList warten können, bis alle Ihre Rückrufe abgeschlossen sind.

Beachten Sie auch, dass twisAmaz einen Wert zurückgibt. Dieser Wert wird über callbacks DeferredList übergeben und als value ausgegeben. Da ein DeferredList die Reihenfolge der Dinge behält, die darin eingefügt werden, können Sie den Index der Ergebnisse mit dem Index Ihrer ISBNs querverweisen.

%Vor%     
habnabit 15.08.2010, 20:26
quelle
3

Eine andere coole Methode ist das mit @ defer.inlineCallbacks. Sie können asynchronen Code wie eine reguläre sequenzielle Funktion schreiben: Ссылка

    
Thomas Dignan 19.12.2012 02:14
quelle
2

Erstens sollten Sie in Ihrer verzögerten Methode kein reactor.stop () einfügen, da es alles zerstört.

In Twisted ist "Warten" jetzt nicht erlaubt. Um die Ergebnisse Ihres Rückrufs zu drucken, fügen Sie einfach einen weiteren Rückruf nach dem ersten hinzu.

    
Luc Stepniewski 15.08.2010 19:26
quelle

Tags und Links