Re: Re: ¿Asyncore o Threading?

Chema Cortes pych3m4 en gmail.com
Vie Mayo 11 03:21:09 CEST 2007


El 1/05/07, Pepe Aracil <pepe en diselpro.com> escribió:
> Hola Gabriel.
>
> Voy ha hacer experimentos con asyncore y generadores, creo que
> con estos últimos podré resolver los problemas que me plantea la
> programación orientada a eventos (para este caso en particular).

En realidad, el problema que planteas es típico para usar "corutinas".
En python, a partir de la versión 2.5, se pueden implementar usando
"generadores mejorados" (en otros lenguajes como ruby o lua es
bastante habitual usar corutinas, así como también las tienes en
"python stackless").

> Por otro lado, si tengo una máquina con varias cpus/cores/hyperthreading,
> creo que seria buena idea lanzar varios loops de asyncore (¿tantos como cpus?)
> en threads distintos y repartir la carga entre ellos.

Como ya te han dicho, el GIL frena la ejecución multihilo. Yo usaría
corutinas para chequear los sockets e iría lanzando threads/forks con
las tareas por hacer (tal vez, mediante una cola de prioridades). Los
threads van bien para ejecutar código externo (librerías dinámicas) o
para acceso al hardware; los forks van mucho mejor cuando se usan
varias cpus/cores, que es lo que quieres, aunque tendrás que usar
algún tipo de señalización para sincronizar los forks.

Si en lugar de python usas jython no tendrías el problema del GIL..




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