[pyar] Ejecucion concurrente de funciones

Julian Agustin Cardonnet jcardonnet en gmail.com
Mie Ene 26 15:43:02 ART 2011


Hola Lista

Herede una aplicacion hecha en web2py y estoy buscando una forma
sencilla de paralelizar la ejecucion de algunas funciones I/O bound
(son todos requests HTTP). Hasta ahora se ejecutaba todo
secuencialmente pero la latencia es demasiado alta (porque son muchas
invocaciones).

El cuello de botella esta ahi, porque lo medi.

Los requests son independientes entre si, no comparten datos ni hacen
nada raro que pueda producir un deadlock u otra situacion indeseable.

Usando multiprocessing.pool().map obtuve algunas mejoras en los casos
en que se invoca el mismo metodo para todo, por ej
urllib2.urlopen().read() pero quisiera tambien poder ejecutar
concurrentemente funciones distintas sin tener que hacer muchos
malabares. Estas "funciones distintas" son por ej invocaciones al API
de Yahoo currentemente con unas al API de Google.

Por "sin hacer muchos malabares" me refiero a que preferiria no tener
que manejar la concurrencia a mano sino algo que resulte transparente
como el map concurrente: le doy que funciones quiero ejecutar, con que
parametros y cuando termina tengo todos los resultados en un array.

Por lo que entiendo en este caso el GIL no es un obstaculo porque como
aclare al principio son operaciones I/O bound y por lo tanto
simplemente lo que quiero evitar es tener que quedarme cruzado de
brazos mientras espero la respuesta del webserver.

Usando lo que python trae built-in por lo que estuve leyendo me
parecio un quilombo (manejar a mano los threads o procesos)
innecesario y por otro lado la multitud de bibliotecas e interpretes
alternativos me resulto un poco abrumadora y en una de esas alguno por
aca tiene experiencia en este tipo de cosas y me puede cantar la posta
o por lo menos guiarme para que lado correr.

Las restricciones que tengo son:
 - El interprete es cpython 2.6 y no lo puedo cambiar.
 - Corre en linux

Gracias y Saludos
Julian



More information about the pyar mailing list