2011-02-25 9 views

Respuesta

6

Puede buscar en Google "coroutines de Python" y obtener mucha información útil. Here is a presentation (PDF) Me encontré con que hace un tiempo me pareció muy bueno sobre cómo y por qué. El source code is also available (esto incluye el PDF, así que si quieres los dos, simplemente descarga esto). El home page para esta presentación tiene enlaces a los archivos fuente individuales.

+0

+1 para el enlace de presentación. Gran lectura. – RHSeeger

3

¿Sabes qué es un generador? Una función que puede detener su procesamiento para que pueda devolver ("ceder") un valor antes de reanudarse para producir el siguiente.

Bueno, una coroutine (aunque el PEP usa el término "cofunction") es así, excepto que nunca necesita ceder nada, y puede transferirse a otra corutina (un "cocall" en el idioma del PEP). Hay todo tipo de usos de esta capacidad, como ser capaz de construir lo que es esencialmente tu propia herramienta de enhebrado cooperativo ligero además de esto (he visto algunas bibliotecas de plantillas muy ordenadas hechas de esta manera también) aunque eso es particularmente útil cuando puedes transferencia entre funciones llamadas desde corutinas también.

Tenga en cuenta que hay nada que requiera coroutines. Siempre puede escribir el código de una manera diferente y prescindir de ellos. A veces es mucho más complicado hacerlo (debido a la necesidad de una administración estatal más explícita).

1

La propuesta de cofunciones es solo una limpieza de las instalaciones de corotinas existentes de python, que hasta ahora se basaban en generadores (algo relacionado con el canonical presentation). El PEP explica el motivations: hacer que los mensajes de error sean más explícitos, evitando la posibilidad de determinar si una función es un generador por la presencia de la palabra clave yield, y facilitando la delegación entre corutinas.

Cuestiones relacionadas