2016-07-02 73 views
0

我正在嘗試使用gevent進行異步編程,並且無法理解我的代碼的工作方式。gevent spawing - 按順序而不是併發

我嘗試ping google.com使用一個關閉的端口(22)上的插座和期待ping功能同時發生,但情況並非如此

我有一個Python代碼如下

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 

任何幫助將有所幫助。

謝謝

回答

0

想通了解。

在導入中添加猴子補丁解決了我的問題。

from gevent import monkey 
monkey.patch_socket() 
相關問題