Interpretador do Python bloqueia solicitações de DNS multithreaded?

Eu apenas brinquei um pouco com python e threads, e percebi que mesmo em um script multiencadeado, as solicitações de DNS estão bloqueando. Considere o seguinte script:

de threading import Importação de linha

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()

Eu não sei exatamente quanto tempo o tempo limite é, mas quando executando isso acontece o seguinte:

Todos os Threads começam e eu recebo minhas impressõesA cada xx segundos, um thread é exibido concluído, em vez de tudo de uma vezOs Threads terminam sequencialmente, não todos de uma vez (timeout = same for all!)

Então, meu único palpite é que isso tem a ver com a GIL? Obviamente, os encadeamentos não executam suas tarefas simultaneamente, apenas uma conexão é tentada de cada vez.

Alguém sabe uma maneira de contornar isso?

(assíncrona não ajuda, e prefiro não usartorcido por enquanto) Não é possível fazer essa pequena coisa simples com python?

Saudações, Tom

editar:

Eu estou no MacOSX, eu apenas deixo meu amigo rodar isso no linux, e ele realmente consegue os resultados que eu queria. Seu socket.connects () retorna imediatamente, mesmo em um ambiente não Threaded. E mesmo quando ele coloca os soquetes para bloquear e tempo limite de 10 segundos, todos os seus Threads terminam ao mesmo tempo.

Alguém pode explicar isso?

questionAnswers(3)

yourAnswerToTheQuestion