python3 多线程ping当前网段主机是否存活
1. python3 多线程
# 主线程只负责生成工作线程 # 工作线程只做具体的工作 # 多线程共享进程里的内存块 # 多进程不共享 import threading def Hello(world, tedu): print('Hello %s %s!' % (world,tedu)) if __name__ == '__main__': for i in range(3): th = threading.Thread(target=Hello, args=('world','tedu')) # 创建工作线程 th.start() # 启动工作线程
2.. python3 多线程ping当前网段主机是否存活
# 多线程的方式ping当前11网段主机 import subprocess import threading def ping_host(hosts): result_ping = subprocess.run("ping %s -c 2 &> /dev/null" % hosts, shell=True) if result_ping.returncode == 0: print('%s is up' % hosts) else: print('%s is down' % hosts) if __name__ == '__main__': iplist = [ '192.168.11.%s' % hosts for hosts in range(1,255)] for hosts in iplist: th = threading.Thread(target=ping_host, args=(hosts,)) th.start()
3. python3 以OOB的方式,不绑定实例,多线程ping主机是否存活
# 以 OOB 的方式传参不绑定实例 # 进行11网段的主机IP地址ping,看主机是否存活 import subprocess import threading class Ping_Host(): def __call__(self, hosts): result_ping = subprocess.run("ping -c 2 %s &>/dev/null" %hosts, shell=True) if result_ping.returncode == 0: print("%s is online" % hosts) else: print("%s is death" % hosts) if __name__ == '__main__': ips = ["192.168.11.%s" % hosts for hosts in range(1,255)] for hosts in ips: th = threading.Thread(target=Ping_Host(), args=(hosts,)) th.start()
4. python3 以OOB的方式,绑定实例,多线程ping主机是否存活
# 以OOB的方式绑定实例hosts # ping 11 网段的主机,看是否存活 import subprocess import threading # 定义类 class Ping_Host: # 初始化实例 def __init__(self, hosts): # 将hosts绑定实例 self.hosts = hosts # 调用call方法,在调用类的时候,call方法被自动执行,而hosts又是绑定到类中的,所以调用Ping_Host的类的时候call方法被调用,下面的代码被执行。 def __call__(self, *args, **kwargs): # 调用subprocess模块,执行系统命令 ping_result = subprocess.run("ping -c 2 %s &> /dev/null" % self.hosts, shell=True) # 判断命令执行结果的返回码,返回码为0,则执行成功。 if ping_result.returncode == 0: print("%s is up" % self.hosts) else: print("%s is down" % self.hosts) if __name__ == '__main__': # 生成ip列表 ips = ['192.168.11.%s' % hosts for hosts in range(1,255)] # 循环IP列表 for hosts in ips: # 每次循环,创建工作线程,调用Ping_Host类,将hosts参数传给类 thread_result = threading.Thread(target=Ping_Host(hosts)) # 开启多线程,当前线程执行完毕后自行退出。 thread_result.start()
5. python3 以OOB的方式,绑定实例,多线程ping主机是否存活,控制线程在5个
# 以OOB的方式绑定实例hosts # ping 11 网段的主机,看是否存活 import subprocess import threading # 定义类 class Ping_Host: # 初始化实例 def __init__(self, hosts): # 将hosts绑定实例 self.hosts = hosts # 调用call方法,在调用类的时候,call方法被自动执行,而hosts又是绑定到类中的,所以调用Ping_Host的类的时候call方法被调用,下面的代码被执行。 def __call__(self, *args, **kwargs): # 调用subprocess模块,执行系统命令 ping_result = subprocess.run("ping -c 2 %s &> /dev/null" % self.hosts, shell=True) # 判断命令执行结果的返回码,返回码为0,则执行成功。 if ping_result.returncode == 0: print("%s is up" % self.hosts) else: print("%s is down" % self.hosts) if __name__ == '__main__': # 生成ip列表 ips = ['192.168.11.%s' % hosts for hosts in range(1,255)] # 创建线程池 thread_pool = [] max_threads = 5 for hosts in ips: # 控制线程数量,如果线程的数量大于等于5个,就等所有线程完成,完成之后再清空线程池 if len(thread_pool) >= max_threads: # 等待所有线程完成 for thread in thread_pool: thread.join() # 清空线程池 thread_pool = [] # 每次循环,创建工作线程,调用Ping_Host类,将hosts参数传给函数 thread_result = threading.Thread(target=Ping_Host(hosts)) # 将线程加入列表 thread_pool.append(thread_result) # 开启多线程,当前线程执行完毕后自行退出。 thread_result.start()