[Python-es] Threads con operaciones I/O en Python

lasizoillo lasizoillo en gmail.com
Mar Jun 8 16:47:35 CEST 2010


El día 8 de junio de 2010 16:11, Antonio Beamud Montero
<antonio.beamud en gmail.com> escribió:
> Félix Palazuelos Pérez escribió:
>>
>> Buf, enormes los dos, cuanta información y de qué calidad, en serio,
>> muchas gracias por el esfuerzo de vuestras respuestas. La libreria speex de
>> python es un wrap de pyrex según tengo entendido y no usa hilos dentro ni
>> nada y osaudiodev es un .so que supongo que sea también un wrap de C. Las
>> másquinas no van a ser multicore y se usarán en un debian lo más liviano
>> posible. Voy a tirar a hacerlo por hilos, con la ejecución de la gui
>> wxpython y un hilo que escuche por el puerto serie, lo unico que tengo que
>> comunicar son las acciones de la gui al hilo de escucha que lanzará tramas
>> según lo que le preguntes por el serie y la acción que haya llevado a cabo
>> el usuario. Si me podeís dar algún consejo más de implemteación agradecido
>> estaré, pero de nuevo muchas gracias. me informaré más sobre hijos en Python
>> ;)
>
> Si los hilos son de proceso están muy ligados a E/S te recomiendo gevent
> (http://www.gevent.org/). El api es muy similar a trabajar con hilos, pero
> por debajo usa libevent, para trabajar de forma asincrona.
>

No entiendo las ventajas de usar gevent para este caso concreto.
Entendería usarla si se dieran las siguientes condiciones:
 * No va a tener problemas con librerias que no cooperan
 * Va a necesitar de hilos a cascoporro y quiere minimizar el overhead
 * Va a sacar partido de usar los pollers (kevent, epoll, ...) que
proporciona libevent.
 * Evitar cambios de contexto en los hilos le va a suponer una ventaja

El primer punto lo veo conflictivo en su caso. Porque va a usar
librerias que no van a cooperar con los greenlets. Así que usar gevent
le puede dar más problemas que ventajas.

No creo que vaya a necesitar de muchos hilos. Así que el número de
hilos python a usar no debería suponer mucho overhead. Tampoco creo
que vaya a notar mucha diferencia entre un poller como select o uno
como epoll si el numero de eventos registrados es mínimo.

¿Me estoy perdiendo algo del maravilloso framework gevent? ¿De qué
forma ventajosa se podría utilizar en este caso concreto? También es
verdad que si usa  gevent mediante monkey-patching la prueba es gratis
;-)

Un saludo:

Javi



Más información sobre la lista de distribución Python-es