2012-04-10 11 views
8

Los documentos aquí http://twistedmatrix.com/documents/current/api/twisted.internet.task.html#cooperate sugieren que la diferencia es que cooperate devuelve un CooperativeTask mientras que coiterate devuelve un Deferred (evidenciado por mis propias pruebas, no especificado en los documentos). Invertí el fin de semana aprendiendo los conceptos básicos de Twisted, así que entiendo qué es un Deferred y he sido un buen chico al enviar mi código de bloqueo a hilos/procesos. Entiendo que el colaterato va tan rápido como Twisted lo permite, mientras que LoopingCall intenta disparar en el intervalo seleccionado.Twisted (Python): ¿cuál es la diferencia entre cooperate y coiterate?

Mi corazonada es que las tareas cooperate() se realizan dentro de los objetos CooperativeTask y coiterate() dentro de los objetos Diferidos. Si alguien puede resumir las diferencias de comportamiento entre cooperate y coiterate, lo agradecería.

Respuesta

9

Casi, pero no exactamente. cooperate es una API un poco más nueva que coiterate. cooperate es generalmente una versión ligeramente mejor de coiterate y casi siempre quiere usarla. Devolver un CooperativeTask confiere dos beneficios. En primer lugar, puede pause y resume la tarea sin stopping y, en segundo lugar, puede generar multiple Deferreds que le notifique cuándo se realiza la tarea sin interferir entre sí, en lugar de solo una.

Tanto coiteratecooperate y producen una CooperativeTask bajo el capó, y ambos utilizan un intervalo muy corto LoopingCall como su planificador del defecto. Si desea utilizar un programador de tareas diferente, siempre puede crear una instancia de su propio Cooperator.

(Por cierto, si no hay error doc aún por el hecho de que devuelve una coiterateDeferred, por favor presentar una.)

+0

exactamente la respuesta que estaba buscando y algo más. ¡Gracias! – pagga

Cuestiones relacionadas