9

这里的文档 http://twistedmatrix.com/documents/current/api/twisted.internet.task.html#cooperate 表明不同之处在于合作返回一个 CooperativeTask 而 coiterate 返回一个 Deferred (由我自己的测试证明,未指定在文档中)。我已经在周末投入了学习 Twisted 的基础知识,所以我了解了什么是 Deferred,并且我一直是一个将我的阻塞代码发送到线程/进程的好孩子。我了解 coiterate 的运行速度与 Twisted 允许的一样快,而 LoopingCall 尝试以选定的时间间隔触发。

我的直觉是,cooperative() 任务在 CooperativeTask 对象中完成,而 coiterate() 在 Deferred 对象中完成。如果有人可以总结合作和合作之间的行为差​​异,我将不胜感激。

4

1 回答 1

10

几乎,但不完全是。 cooperate是一个比coiterate. cooperate通常只是一个稍微好一点的版本,coiterate你几乎总是想使用它。返回 a 有CooperativeTask两个好处。首先,您可以在不停止任务的情况下暂停恢复任务,其次,您可以生成多个 Deferred,在任务完成时通知您,而不会相互干扰,而不仅仅是一个。

两者都在后台生成,coiterate并且都使用非常短的间隔作为默认调度程序。如果你想使用不同的任务调度器,你总是可以实例化你自己的.cooperateCooperativeTaskLoopingCallCooperator

(顺便说一句,如果还没有关于coiterate返回 a的文档错误Deferred,请提交一个。)

于 2012-04-10T05:38:29.190 回答