9

ここのドキュメント http://twistedmatrix.com/documents/current/api/twisted.internet.task.html#cooperate は、その違いは、cooperate が CooperativeTask を返すのに対し、coiterate は Deferred を返すことであることを示唆しています (指定されていない私自身のテストで証明されています)。ドキュメントで)。私は Twisted の基礎を学ぶために週末を費やしてきたので、Deferred が何であるかを理解し、ブロッキング コードをスレッド/プロセスに送る良い子でした。LoopingCall は選択された間隔で起動しようとするのに対し、coiterate は Twisted が許可する限り速く進むことを理解しています。

私は、cooperative() タスクは CooperativeTask オブジェクト内で実行され、coiterate() は Deferred オブジェクト内で実行されると考えています。誰かが協力と共謀の行動の違いを要約できるなら、私はそれを感謝します.

4

1 に答える 1

10

ほとんどですが、正確ではありません。 cooperateより少し新しい API ですcoiteratecooperateは通常、 のわずかに優れたバージョンでcoiterateあり、ほぼ常に使用したいと考えています。を返すと、CooperativeTask2 つの利点が得られます。1つ目は、タスクを停止せずに一時停止および再開できることです。2 つ目は、タスクが完了したことを通知する複数の Deferredを生成し、1 つのタスクだけでなく、互いに干渉することなく通知することです。

と の両方が内部coiteratecooperate生成し、両方ともデフォルトのスケジューラとしてCooperativeTask非常に短い間隔を使用します。LoopingCall別のタスク スケジューラを使用する場合は、いつでも独自の をインスタンス化できますCooperator

(ちなみに、 が をcoiterate返すという事実についてまだドキュメント バグがない場合は、バグを報告してDeferredください。)

于 2012-04-10T05:38:29.190 に答える