Herramientas de usuario

Herramientas del sitio


fw:greenlet

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
fw:greenlet [2013/07/04 16:30]
alfred
— (actual)
Línea 1: Línea 1:
-====== Greenlet ====== 
-Un greenlet es un micro-thread sin "​organización implícita",​ esto significa que contraolas exactamente cuando se está ejecutando y adecuar su uso. \\  
-El uso de greenlets es parecido al de una pila de capas. La más baja es la función inicial que fue llamada, y las demás son greenlets actualmente pausados. Se irá indicando cuando se quiere trabajar con uno o con otro (switching). \\  
  
-Cuando se crea un greenlet se inicia una pila vacía y se ejecuta en ella una función específica. \\  
- 
-Los greenlet pueden morir al acabar su ejecución o debido a una excepción no controlada. \\  
- 
-La salida del siguiente código es: 12, 56, 34. Nunca aparecerá el 78 a no ser que se le añada un ''​gr2.switch()''​ después de imprimir 34. 
-<code python> 
-from greenlet import greenlet 
- 
-def test1(): 
-    print 12 
-    gr2.switch() 
-    print 34 
- 
-def test2(): 
-    print 56 
-    gr1.switch() 
-    print 78 
- 
-gr1 = greenlet(test1) 
-gr2 = greenlet(test2) 
-gr1.switch() 
-</​code>​ 
- 
-===== Conceptos ===== 
- 
-==== Muerte de un greenlet ==== 
-Cada greenlet tiene un greenlet "​padre"​ el cual es donde fue creado. El padre también es donde la ejecución del greenlet continua cuando el greenlet muere. En el código de arriba tanto gr1 como gr2 tienen ''​main''​ como el greenlet padre, cuando la ejecución de alguno de los dos acaba se vuelve al main. 
- 
-==== Creación ==== 
- 
-==== Switching ==== 
-Switches entre greenlets ocurren cuando el método switch del greenlet es llamado. Se pasará al greenlet al cual ''​switch()''​ ha sido llamado. \\  
-Se puede pasar información ​ 
- 
-<code python> 
-def test1(x, y):< 
-    z = gr2.switch(x+y) 
-    print z 
- 
-def test2(u): 
-    print u 
-    gr1.switch(42) 
- 
-gr1 = greenlet(test1) 
-gr2 = greenlet(test2) 
-gr1.switch("​hello",​ " world"​) 
-</​code>​ 
-Imprimirá "hello world" y 42. 
-==== Métodos ==== 
-  * ''​switch(*args,​ **kwargs)'',​ cambia la ejecución del greenlet. 
-  * ''​run'',​ es un atributo que deja de existir cuando el greenlet ha sido iniciado. 
-  * ''​parent'',​ el greenlet padre. 
-  * ''​gr_frame'',​ la capa de más arriba (o ''​None''​). 
-  * ''​dead'',​ ''​True''​ si el greenlet está muerto. 
- 
-Podemos hacer un cast a ''​bool''​ de una variable greenlet, esta será true si el greenlet está activo. 
fw/greenlet.1372955456.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)