二、实验说明¶
2.1 导入Python内置模块threading来实现多线程¶
2.2 定义一个ssh_session(ip,output_q)函数,包含ip和output_q两个参数,分别用来表示登录设备的IP地址以及表示先进先出队列¶
2.3 配合for循环语句使用threading的Thread()函数为ssh_session(ip,output_q)函数创建多个线程并将其赋值给变量t¶
2.4 调用threading的start()启动刚刚创建的线程¶
2.5 配合for循环语句对每个线程调用join()方法,确保所有线程执行结束¶
2.6 所有线程执行结束后执行内核线程的print()语句¶
三、实验脚本¶
#设置编码格式支持utf-8
#coding=utf-8
#通过import语句引入threading模块、内置队列模块queue中Queue类、time模块、netmiko库中的ConnectHandler方法
import threading
from queue import Queue
import time
from netmiko import ConnectHandler
#打开名为ip_list.txt的文件并将其赋值给变量f
f = open('ip_list.txt')
#创建一个名为threads的空列表,方便储存线程
threads = []
#定义一个名为ssh_session(ip,output_q)的函数
def ssh_session(ip,output_q):
#定义一个包含命令的列表commands
commands = ['int loop 0','ip address 1.1.1.1 24']
#创建一个名为SW的字典,其中包含着设备类型、设备登录IP、登录用户名、登录密码
SW = {
'device_type':'huawei',
'ip':'ip',
'username':'python',
'password':'123'}
#调用netmiko库里的方法ConnectHandler()登录设备
connect = ConnectHandler(**SW)
#执行列表commands中的一系列的命令并将回显内容赋值给output,将其打印出来
output = connect.send_config_set(commands)
print(output)
#打印程序开始时间
print(f"程序于{time.strftime('%X')} 开始执行\n")
#将读取到的IP地址一一赋值给ips
for ips in f.readlines():
#使用threading中的Thread()函数为ssh_session(ip,output_q)函数创建一个线程并将其赋值给变量t,其中target参数对应的是函数名称ssh_session,args对应的是去除空白行的IP地址,这里应用queue模块中Queue类---先进先出队列并将它作为参数配置给output_q
t = threading.Thread(target=ssh_session,args=(ips.strip(),Queue()))
#调用threading中的start()来启动刚刚创建的线程
t.start()
#将线程一一添加到列表threads中
threads.append(t)
#针对每个线程,调用join()方法强制阻塞调用它的线程,直到当前线程运行完毕或者终止
for i in threads:
i.join()
#打印程序执行结束时间
print(f"\n程序于{time.strftime('%X')} 执行结束")
四、实验环境¶
4.1 操作环境:Linux环境¶
4.2 Python版本:3.8¶
五、实验步骤¶
5.1 使用'vi netmiko_thread.py'创建脚本文件,并将其上述脚本内容复制粘贴¶

5.2 使用'chmod +x netmiko_thread.py'给脚本文件添加可执行权限¶
5.3 使用'vi ip_list.txt'创建包含IP地址的文本文件¶

5.4 使用'python3.8 netmiko_thread.py'执行脚本文件¶
