2012-04-10 6 views
8

Die Dokumente hier schlagen vor, dass der Unterschied ist, dass die Zusammenarbeit eine CooperativeTask zurückgibt, während coiterate einen Deferred (belegt durch meine eigenen Tests, nicht in der Dokumentation angegeben) zurückgibt. Ich habe das Wochenende damit verbracht, die Grundlagen von Twisted zu lernen, also verstehe ich, was ein Deferred ist, und ich war ein guter Junge, der meinen Blocking-Code zu Threads/Prozessen geschickt hat. Ich verstehe, dass coiterate so schnell geht, wie es Twisted zulässt, während LoopingCall versucht, mit dem ausgewählten Intervall zu feuern.Twisted (Python) - was ist der Unterschied zwischen kooperieren und coitieren?

Meine Ahnung ist, dass cooperate() -Aufgaben innerhalb von CooperativeTask-Objekten und coiterate() innerhalb von Deferred-Objekten ausgeführt werden. Wenn jemand die Unterschiede im Verhalten zwischen kooperieren und coitrate zusammenfassen kann, würde ich es schätzen.

Antwort

9

Fast, aber nicht genau. cooperate ist eine etwas neuere API als coiterate. cooperate ist in der Regel nur eine etwas bessere Version von coiterate und Sie wollen es eigentlich immer verwenden. Die Rückgabe eines CooperativeTask bietet zwei Vorteile. Erstens können Sie pause und resume die Aufgabe ohne stopping es, und zweitens, können Sie multiple Deferreds generieren, die Sie benachrichtigt, wenn die Aufgabe erledigt ist, ohne sich gegenseitig zu stören, anstatt nur die eine.

Sowohl coiterate und cooperate produzieren eine CooperativeTask unter der Haube, und beide verwenden, um ein sehr kurzes Intervall LoopingCall als Standard-Scheduler. Wenn Sie einen anderen Taskplaner verwenden möchten, können Sie immer Ihren eigenen Cooperator instanziieren.

(By the way, wenn es keine doc Fehler für die Tatsache, noch ist die coiterate ein Deferred gibt, bitte eine Datei.)

+0

genau die Antwort, die ich suchte und dann einige. Vielen Dank! – pagga

Verwandte Themen