2016-07-02 1 views
0

J'essaie ma main sur la programmation asynchrone avec gevent et pas capable de comprendre le fonctionnement de mon code.gevent spawing - dans la séquence plutôt que concurrente

Je suis en train de faire un ping google.com à l'aide des prises sur un port fermé (22) et attend la fonction ping se produise en même temps, mais il ne se produit pas

J'ai un code python comme ci-dessous

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

J'attends de voir:

0 
1 
2 
timeout 
timeout 
timeout 

C'est ce que je veux

0 
timed out 
1 
timed out 
2 
timed out 

Toute aide pourrait être utile.

Remerciements

Répondre

0

Modélisé la solution. L'ajout d'un correctif de singe à l'importation a permis de résoudre mon problème.

from gevent import monkey 
monkey.patch_socket()