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:56]
alfred [gevent]
fw:gevent [2020/05/09 09:25] (actual)
Línea 62: Línea 62:
 ===== gevent ===== ===== gevent =====
   * Para instalarlo has de tener instalado en el operativo la librería ''​libevent-dev''​   * 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 para aplicaciones asíncronas. Donde puede ser aprovechado es las funciones de network. \\ +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 82: Línea 83:
 ... Se ejecuta de la siguiente forma: \\  ... Se ejecuta de la siguiente forma: \\ 
 {{:​fw:​others:​flow.gif?​direct&​200|}} ​ {{:​fw:​others:​flow.gif?​direct&​200|}} ​
-===== Méotodos ​=====+==== Méotodos ====
   * ''​gevent.spawn()''​   * ''​gevent.spawn()''​
   * ''​gevent.joinall([gevents])'',​ detiene la ejecución del programa hasta que los greenlets no han acabado.   * ''​gevent.joinall([gevents])'',​ detiene la ejecución del programa hasta que los greenlets no han acabado.
-==== Ejemplos ====+ 
 +==== 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 134: 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.1372957008.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)