Herramientas de usuario

Herramientas del sitio


fw:gevent

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:gevent [2013/07/04 16:49]
alfred [gevent]
fw:gevent [2020/05/09 09:25] (actual)
Línea 61: Línea 61:
  
 ===== gevent ===== ===== gevent =====
-Es una librería basada en concurrencia para aplicaciones asíncronas. Donde puede ser aprovechado es las funciones de network. \\ +  * Para instalarlo has de tener instalado en el operativo la librería ''​libevent-dev''​ 
 +  * [[http://​www.gevent.org/​contents.html|Documentación]] 
 + 
 +Es una librería basada en concurrencia ​por greenlets ​para desarrollar ​aplicaciones asíncronaspuede ser aprovechado es las funciones de network. \\ 
 El siguiente código: El siguiente código:
 <code python> <code python>
Línea 79: Línea 82:
 </​code>​ </​code>​
 ... Se ejecuta de la siguiente forma: \\  ... Se ejecuta de la siguiente forma: \\ 
-{{:​fw:​others:​flow.gif?​direct&​200|}} \\  +{{:​fw:​others:​flow.gif?​direct&​200|}} ​ 
-==== Ejemplos ====+==== Méotodos ==== 
 +  * ''​gevent.spawn()''​ 
 +  * ''​gevent.joinall([gevents])'',​ detiene la ejecución del programa hasta que los greenlets no han acabado. 
 + 
 +==== Monkey patching ==== 
 +Es una técnica que consiste en substituir llamadas a elementos del sistema que son bloqueantes por otras que no lo son y, de esa forma, adaptar código antiguo al nuevo. ​\\  
 +Por ejemplo existe una substitución a ''​sleep''​. La de la librería básica bloquea el event loop mientras que ''​gevent.spleep''​ no . \\  
 +Módulos que han sido substituidos:​ //socket//, //ssl//, //os//, //time//, //select//, //thread // y //​threading//​. 
 + 
 + 
 + 
 +===== Ejemplos ===== 
 +=== Métodos síncronos y asíncronos ​===
  
 <code python> <code python>
Línea 129: Línea 144:
 Task 9 done Task 9 done
 Task 4 done Task 4 done
 +</​code>​
 +
 +=== Acceso a red asíncronamente ===
 +<code python>
 +import gevent.monkey
 +gevent.monkey.patch_socket()
 +
 +import gevent
 +import urllib2
 +import simplejson as json
 +
 +def fetch(pid):
 +    response = urllib2.urlopen('​http://​json-time.appspot.com/​time.json'​)
 +    result = response.read()
 +    json_result = json.loads(result)
 +    datetime = json_result['​datetime'​]
 +
 +    print '​Process ', pid, datetime
 +    return json_result['​datetime'​]
 +
 +def synchronous():​
 +    for i in range(1,​10):​
 +        fetch(i)
 +
 +def asynchronous():​
 +    threads = []
 +    for i in range(1,​10):​
 +        threads.append(gevent.spawn(fetch,​ i))
 +    gevent.joinall(threads)
 +
 +print '​Synchronous:'​
 +synchronous()
 +
 +print '​Asynchronous:'​
 +asynchronous()
 +</​code>​
 +===== Notas =====
 +==== ZeroMQ ====
 +Para hacer el paquete ''​pyzmq''​ compatible con los greenlets instalaremos el paquete ''​gevent-zeromq''​. A partir de entonces instanciaremos zeromq de la siguiente forma:
 +<code python>
 +from gevent_zeromq import zmq
 </​code>​ </​code>​
fw/gevent.1372956582.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)