Tengo un problema bastante simple aquí. Necesito comunicarme con muchos hosts simultáneamente, pero realmente no necesito ninguna sincronización porque cada solicitud es bastante autosuficiente.¿Cómo puedo obtener socket connect() sin bloqueo?
Debido a eso, elegí trabajar con sockets asincrónicos, en lugar de spamming. Ahora tengo un pequeño problema:
Las cosas asincrónicas funcionan como un amuleto, pero cuando me conecto a 100 hosts, y obtengo 100 tiempos de espera (tiempo de espera = 10 segundos), entonces espero 1000 segundos, solo para descubrir todas mis conexiones fallaron
¿Hay alguna manera de obtener también conexiones de zócalo no bloqueantes? Mi socket ya está configurado para no bloquear, pero las llamadas a connect() todavía están bloqueando.
Reducir el tiempo de espera no es una solución aceptable.
Estoy haciendo esto en Python, pero supongo que el lenguaje de programación realmente no importa en este caso.
¿Realmente necesito usar hilos?
Muy bien, tengo que disculparme aquí. Cogí el código directamente de los documentos de Python, por lo que no era mi código, daba por sentado que era correcto. Y no funcionó. Me sucedía frecuentemente que la gente me daba consejos, que ni siquiera se confirmaban a sí mismos. Nunca podría haber supuesto que mi sistema operativo sería el problema, en lugar del código, así que pensé que era solo un tipo más que pensaba que era inteligente y copiaba el código de documentación sin siquiera comprobar si funciona. Perdón otra vez por eso. Tiré 3 versiones completas hoy, perdiendo 6 horas, para encontrar que MacOS era el problema. – Tom
por cierto, probé esto de nuevo junto con un amigo en su linux box, e incluso getAddrInfo no parece bloquearse allí. Obtenemos un error: [Errno 115] Operación ahora en progreso. Así que, teóricamente, incluso asyncore con hosts no receptivos podría funcionar en Linux. – Tom
@Tom - np, estoy de acuerdo en que hay toneladas de respuestas desinformadas por aquí, especialmente en los campos que no son Windows. Lo que es peor, es que los equipos de desinformados terminan votando entre sí, lo que dificulta obtener respuestas correctas. – JimB