我想做一个ping远程IP的控制台程序。我使用多线程同时ping多个IP。当所有IP都可以访问时,所有IP看起来都很好,但是当一个IP不可访问时,其他线程必须等待很长时间,直到坏的ping完成(我特意选择了一个不可连接的IP),这是因为连接方法要等到所有线程都结束。当我刚删除连接方法时,我的电脑崩溃了。在
为了克服这个问题,我做了以下的工作(创建了无限的ping函数,这样就不会因为里面的无限方法而终止thead),并在代码中保留了joinmethod,它是正确的,但是还有更好的选择吗?我想这个解决方案在资源消耗或其他方面可能有一些缺点。在
我的工作代码,我对它有疑问:
下面的方法在t100时间间隔内对b(IP)执行一次pingdef do_ping(b,t100):
a=os.system(f"ping -n 1 {b}")
h=good_time(time.localtime(),1)
with open(f"noob_{h}_{b}.txt",mode="a") as f:
t=good_time(time.localtime(),0)
if(a==int(0)):
f.write(f"The remote destination {b} is reachable, everyting is enter code hereOKAY. {t} \n")
elif(a==int(1)):
f.write(f"Ping {b} failed! {t} \n")
time.sleep(int(t100))
IP地址无限之一:
^{pr2}$
主程序:while(True):
treadsN=[]
for i in b:
b是一个IP列表(整个程序还将结果写入文件中,如果ping长时间失败,以后将发送电子邮件treadsN.append(threading.Thread(target=IP_Op.ping1, args=(i,3)))
for i in treadsN:
i.start()
for i in treadsN:
i.join()