2016-07-02 3 views
0

Я пытаюсь использовать асинхронное программирование с gevent и не в состоянии понять, как работает мой код.gevent spawing - последовательно, а не параллельно

Я пытаюсь пинговать google.com с помощью сокетов на закрытый порт (22) и ожидая, что функция ping происходить одновременно, но это не происходит

У меня есть код питона, как показано ниже

class Ping(object): 

    def checkReachability(self,index): 

     sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
     sock.settimeout(2) 

     print index 

     try: 
      sock.connect(('google.com',22)) 
      gevent.sleep(0) 
     except socket.error as e: 
      print str(e) 

     sock.close() 

def ping(self): 

     threads = [gevent.spawn(self.checkReachability, i) for i in range(3)] 
     gevent.joinall(threads) 

if __name__ == 'main': 
    m = Ping() 
    m.ping() 

Я ожидал увидеть:

0 
1 
2 
timeout 
timeout 
timeout 

Это то, что я получаю

0 
timed out 
1 
timed out 
2 
timed out 

Любая помощь была бы полезна.

Thanks

ответ

0

Придумал решение.

Добавление патча обезьяны в процессе импорта решило мою проблему.

from gevent import monkey 
monkey.patch_socket()