Python Interpreter bloquea solicitudes de DNS multiproceso?

Simplemente jugué un poco con python y subprocesos, y me di cuenta de que, incluso en un script multiproceso, las solicitudes de DNS están bloqueando. Considere el siguiente script:

de subprocesos importación importación de subprocesos socket

class Connection(Thread):
    def __init__(self, name, url):
        Thread.__init__(self)
        self._url = url
        self._name = name

    def run(self):
        print "Connecting...", self._name
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.setblocking(0)
            s.connect((self._url, 80))
        except socket.gaierror:
            pass #not interested in it
        print "finished", self._name


if __name__ == '__main__':
    conns = []
    # all invalid addresses to see how they fail / check times
    conns.append(Connection("conn1", "www.2eg11erdhrtj.com"))
    conns.append(Connection("conn2", "www.e2ger2dh2rtj.com"))
    conns.append(Connection("conn3", "www.eg2de3rh1rtj.com"))
    conns.append(Connection("conn4", "www.ege2rh4rd1tj.com"))
    conns.append(Connection("conn5", "www.ege52drhrtj1.com"))

    for conn in conns:
        conn.start()

No sé exactamente cuánto tiempo dura el tiempo de espera, pero cuando se ejecuta esto sucede lo siguiente:

Todos los hilos comienzan y recibo mis impresionesCada xx segundos, se muestra un hilo, en lugar de todos a la vezLos hilos terminan secuencialmente, no todos a la vez (tiempo de espera = ¡igual para todos!)

Así que mi única conjetura es que esto tiene que ver con la GIL? Obviamente, los subprocesos no realizan su tarea simultáneamente, solo se intenta una conexión a la vez.

¿Alguien sabe una manera de evitar esto?

(asyncore No ayuda, y prefiero no usarretorcido por ahora) ¿No es posible hacer esta pequeña cosa simple con python?

Saludos tom

editar:

Estoy en MacOSX, solo dejo que mi amigo ejecute esto en Linux y él realmente obtiene los resultados que deseaba obtener. Su socket.connects () regresa inmediatamente, incluso en un entorno sin hilos. E incluso cuando configura los zócalos para el bloqueo y el tiempo de espera de 10 segundos, todos sus subprocesos terminan al mismo tiempo.

¿Alguien puede explicar esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta