Blokuje interpreter Pythona Wielowątkowe żądania DNS?

Po prostu grałem trochę z pythonem i wątkami, i zrealizowałem nawet w skrypcie wielowątkowym, żądania DNS blokują się. Rozważ następujący skrypt:

z wątku importuj gniazdo importu wątków

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

Nie wiem dokładnie, jak długi jest limit czasu, ale gdy to uruchomię, dzieje się tak:

Rozpoczynają się wszystkie wątki i otrzymuję wydrukiCo xx sekund wyświetlany jest jeden wątek, zamiast wszystkich narazWątki kończą się sekwencyjnie, nie wszystkie naraz (limit czasu = taki sam dla wszystkich!)

Więc tylko zgaduję, że ma to związek z GIL? Oczywiście wątki nie wykonują jednocześnie swoich zadań, tylko jedno połączenie jest wykonywane jednocześnie.

Czy ktoś zna sposób na to?

(asyncore nie pomaga, a wolałbym nie używaćskręcone na razie) Czy nie da się zrobić tego prostego drobiazgu za pomocą Pythona?

Pozdrowienia, Tom

edytować:

Jestem na MacOSX, po prostu pozwoliłem mojemu przyjacielowi uruchomić to na Linuksie, a on faktycznie uzyskuje wyniki, które chciałem uzyskać. Jego socket.connects () powraca natychmiast, nawet w środowisku bez wątków. A nawet jeśli ustawi gniazda na blokowanie i przekroczy limit 10 sekund, wszystkie jego wątki kończą się w tym samym czasie.

Czy ktoś może to wyjaśnić?

questionAnswers(3)

yourAnswerToTheQuestion