如下代碼,按照我自己的理解會把ip.list中所有的IP地址取出來,假設是100個,判斷22端口是否開放,一共需要5秒鐘就可以判斷出這100個IP的狀況。然而事實是代碼仍然是阻塞的,在22端口不通的情況下,需要5秒后超時才能進行對下一個IP的判斷,這里不理解,請大俠不吝指導,非常感謝!import socket
socket.setdefaulttimeout(5)
def ping(ipp):
while True:
ipport = yield
try:
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(ipport)
conn.close()
except Exception as e:
print ipp,e
else:
print ipp,'OK'
def run():
a = []
with open('ip.list','r') as f:
for i in f.readlines():
ip = i.split()[0]
port = 22
a.append((ip,port))
for i in a:
task = ping(i)
task.next()
task.send(i)
run()
關于yield實現異步的問題,請大俠解惑
嚕嚕噠
2018-07-16 13:13:37