这里的文档 http://twistedmatrix.com/documents/current/api/twisted.internet.task.html#cooperate 建议不同之处在于合作返回一个CooperativeTask,而coiterate返回一个Deferred(由我自己的测试证明,未在docs中指定)。我已经在周末学习了Twisted的基础知识,所以我理解Deferred是什么,我一直是个好男孩,将我的阻塞代码发送到线程/进程。我理解coiterate和Twisted允许的速度一样快,而LoopingCall尝试以选定的间隔触发。
我的预感是,collab()任务在CooperativeTask对象内完成,而coiterate()在Deferred对象中完成。如果有人能够总结出合作与合作之间的行为差异,我会很感激。
答案 0 :(得分:9)
几乎,但不完全是。 cooperate
是一个比coiterate
更新的API。 cooperate
通常只是coiterate
的稍好版本,您几乎总是想要使用它。返回CooperativeTask
会带来两个好处。首先,您可以pause和resume执行没有stopping的任务,其次,您可以生成multiple Deferreds,通知您任务完成的时间而不会相互干扰而不仅仅是那个。
coiterate
和cooperate
都会产生CooperativeTask
,并且两者都使用非常短的间隔LoopingCall
作为其默认调度程序。如果要使用其他任务计划程序,则始终可以实例化自己的Cooperator
。
(顺便说一下,如果coiterate
返回Deferred
这个事实还没有文档错误,请提交一个。)