Twisted(Python) - 合作与合作有什么区别?

时间:2012-04-10 02:10:50

标签: python twisted

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

我的预感是,collab()任务在CooperativeTask对象内完成,而coiterate()在Deferred对象中完成。如果有人能够总结出合作与合作之间的行为差​​异,我会很感激。

1 个答案:

答案 0 :(得分:9)

几乎,但不完全是。 cooperate是一个比coiterate更新的API。 cooperate通常只是coiterate的稍好版本,您几乎总是想要使用它。返回CooperativeTask会带来两个好处。首先,您可以pauseresume执行没有stopping的任务,其次,您可以生成multiple Deferreds,通知您任务完成的时间而不会相互干扰而不仅仅是那个。

coiteratecooperate都会产生CooperativeTask,并且两者都使用非常短的间隔LoopingCall作为其默认调度程序。如果要使用其他任务计划程序,则始终可以实例化自己的Cooperator

(顺便说一下,如果coiterate返回Deferred这个事实还没有文档错误,请提交一个。)