[Python-es] Despertar a "select"

Pepe Aracil pepe en diselpro.com
Jue Mar 11 09:51:40 CET 2010


Hola lista.

Estoy diseñando un servidor TCP que tendrá que atender cientos de 
conexiones simultáneas.
La idea es que un thread se encargue de ejecutar un select (módulo 
select) pasándole como único parámetro la lista de sockets abiertos a la 
espera de datos entrantes.

Hasta aquí todo está claro, el problema viene cuando desde otro thread 
quiero añadir nuevos sockets a la lista de sockets que le paso al 
select. Necesito despertar al select para que recargue la nueva lista.

No quiero hacerlo por timeout ya que es una forma bastante ineficiente, 
ya que si pusiese un timeout de 5 seg. la siguiente lectura de el nuevo 
socket se demoraría un máximo de 5 seg. y
si pongo un timeout muy bajo, estoy echando ciclos de cpu a la basura.

Se me ha ocurrido añadir a la lista del select un socket udp con el 
único fin de actuar como "despertador" . ¿Alguien tiene una idea mejor?

Gracias.





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