0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分别使用多线程多进程协程+paramiko在华为交换机批量快速进行配置

网络技术干货圈 来源:CSDN 2024-01-16 09:13 次阅读

实验原理:

python对于网络设备的操作属于I/O密集型,在脚本运行时,存在大量的等待时间。我们便可以利用这些空闲的时间,进行其他的操作。

由于python解释器在同一时间只能运行一个线程,所以不存在真正意义上的同时配置不同的设备。在多线程、多进程和协程中推荐使用协程这种方法,让一个线程不断的切换执行的任务。

实验拓扑:

fcd04bae-b407-11ee-8b88-92fbcf53809c.png

cloud连接本机,ip地址为192.168.56.1,五台交换机的配置的地址为192.168.1.201~205。现在通过paramiko,ssh进入五台设备,并且在五台设备上分别创建将192.168.56.0 0.0.0.255通告进入OSPF。

版本:python3.9

实验步骤:

一、ssh配置:

##创建秘钥
[sw2]dsalocal-key-paircreate

##配置SSH认证类型(密码/其他)
[sw2]sshuserprinauthentication-typepassword
[sw2]sshuserprinservice-typestelnet
[sw2]stelnetserverenable

##配置认证模式
[sw2]user-interfacevty04
[sw2-ui-vty0-4]authentication-modeaaa//配置认证模式
[sw2-ui-vty0-4]protocolinboundssh//允许ssh连接虚拟终端

##配置本地用户信息
[sw2]aaa
[sw2-aaa]local-userprinpasswordcipherHuawei@123
[sw2-aaa]local-userprinprivilegelevel15
[sw2-aaa]local-userprinservice-typessh

二、paramiko脚本:

ssh_device.py: 使用paramiko连接设备

importtime
importparamiko


defssh_multicmd(ip,username,password,cmd_list,asy_id,wait_time=2,verbose=True):
try:
print('tryssh'+str(asy_id))
ssh=paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,password,timeout=5,compress=True)
print("Youhavesuccessfullyconnectto"+ip+'
')
exceptparamiko.ssh_exception.AuthenticationException:
print("Userauthenticationfailedfor"+ip+".")
return

#激活交互式shell
command=ssh.invoke_shell()
#等待网络设备回应
command.send("system
")
#执行具体的命令
forcmdincmd_list:
command.send(cmd)
time.sleep(wait_time)
#获取路由器返回信息
output=command.recv(65535)
x=output.decode('ascii')
#关闭连接
ssh.close()
ifverbose:
print(x)
returnx


if__name__=='__main__':
#执行命令,查看showversion的值,和配置OSPF
commands=['ospf1
','area0
','network192.168.56.00.0.0.255
']
return_results=ssh_multicmd('192.168.56.205','prin','Huawei@123',commands,1)

三、协程脚本与测试:

coroutine_ssh.py: 使用协程调用ssh_multicmd函数进行快速批量配置

fromssh_deviceimportssh_multicmd

importgevent
fromgeventimportmonkey

monkey.patch_all()

commands=['ospf1
','area0
','network192.168.56.00.0.0.255
']


defget_ssh_result(i):
print("start",i)
#执行的任务函数
result=ssh_multicmd('192.168.56.20'+str(i),'prin','Huawei@123',commands,i,verbose=False)
print("end",i)
returnresult


#同时执行5个任务,id为1-5
tasks=[gevent.spawn(get_ssh_result,i)foriin[1,2,3,4,5]]
all_result=gevent.joinall(tasks)

#获取执行信息
forxinall_result:
print(x.get())

协程测试结果: 可以看到,多个任务‘同时’执行,节约时间。

fce5146c-b407-11ee-8b88-92fbcf53809c.png

四、多进程/多线程脚本配置和测试

multiprocessing_ssh.py: 使用多进程或者多线程来配置脚本

fromssh_deviceimportssh_multicmd
frommultiprocessingimportcpu_count,PoolasProcessPool
frommultiprocessing.poolimportThreadPool
frommultiprocessingimportfreeze_support

results=[]
commands=['ospf1
','area0
','network192.168.56.00.0.0.255
']


#多进程
defmulti_process(ip_prefix,suffix,username,password,commands):
freeze_support()
cpus=cpu_count()#得到内核数的方法
pool=ProcessPool(cpus)#有效控制并发进程或者线程数,默认为内核数(推荐)

#设置对应函数和传入的参数
foriinsuffix:
result=pool.apply_async(ssh_multicmd,args=(ip_prefix+str(i),username,password,commands,i,2,False))
results.append(result)

#调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
pool.close()
pool.join()

forinfoinresults:
print(info.get())


#多线程
defmulti_thread(ip_prefix,suffix,username,password,commands):
pool=ThreadPool(100)
#设置对应函数和传入的参数
foriinsuffix:
result=pool.apply_async(ssh_multicmd,args=(ip_prefix+str(i),username,password,commands,i,2,False))
results.append(result)

#调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
pool.close()
pool.join()

forinfoinresults:
print(info.get())


if__name__=='__main__':
#多线程
#multi_thread('192.168.56.20',range(1,6),'prin','Huawei@123',commands)
#多进程
multi_process('192.168.56.20',range(1,6),'prin','Huawei@123',commands)

协程测试结果: 同样多个任务‘同时’进行,节约了时间。

fcf9869a-b407-11ee-8b88-92fbcf53809c.png








审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 多线程
    +关注

    关注

    0

    文章

    277

    浏览量

    19924
  • SSH
    SSH
    +关注

    关注

    0

    文章

    185

    浏览量

    16311
  • python
    +关注

    关注

    56

    文章

    4784

    浏览量

    84502
  • 华为交换机
    +关注

    关注

    0

    文章

    13

    浏览量

    6299

原文标题:分别使用多线程多进程协程+paramiko在华为交换机批量快速进行配置(eNSP模拟器)

文章出处:【微信号:网络技术干货圈,微信公众号:网络技术干货圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用paramiko在eNSP的交换机批量创建VLAN

    cloud连接本机,ip地址为192.168.56.1,五台交换机配置的地址为192.168.1.11~55。现在通过paramiko,ssh进入五台设备,并且在五台设备上分别创建v
    的头像 发表于 01-20 17:52 1603次阅读
    使用<b class='flag-5'>paramiko</b>在eNSP的<b class='flag-5'>交换机</b>中<b class='flag-5'>批量</b>创建VLAN

    多线程多进程的区别

    6.你的数据库一会又500个连接数,一会有10个,你分析一下情况7.udp和tcp的区别8.多线程多进程的区别9.有一台web服务器,你选择用多线程还是多进程,...
    发表于 07-19 07:21

    浅谈多进程多线程的选择

    鱼还是熊掌:浅谈多进程多线程的选择关于多进程多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,
    发表于 08-24 07:38

    线程有什么区别

    线程的区别线程的共同目的之一是实现系统资源的上下文调用,不过它们的实现层级不同;
    发表于 12-10 06:23

    python多线程多进程对比

    段可以干多件事,譬如可以边吃饭边看电视;在Python中,多线程 虽然是严格上来说是串行,但却比一般的串行程序执行效率高得很。 一般的串行程序,在程序阻塞的时候,只能干等着,不能去做其他事
    发表于 03-15 16:42

    LINUX系统下多线程多进程性能分析

    采用多进程处理多个任务,会占用很多系统资源(主要是CPU 和内存的使用)。在LINUX 中,则对这种弊端进行了改进,在用户态实现了多线程处理多任务。本文系统论述了多线程
    发表于 08-13 08:31 20次下载

    如何选好多线程多进程

    关于多进程多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选
    的头像 发表于 05-11 16:16 2946次阅读
    如何选好<b class='flag-5'>多线程</b>和<b class='flag-5'>多进程</b>

    多进程多线程的深度比较

    嵌入式Linux中文站,关于多进程多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。这句话应付考试基本上够了,但如果在工作中遇
    发表于 04-02 14:42 467次阅读

    浅谈Linux网络编程中的多进程多线程

    在Linux网络编程中,我们应该见过很多网络框架或者server,有多进程的处理方式,也有多线程处理方式,孰好孰坏并没有可比性,首先选择多进程还是多线程我们需要考虑业务场景,其次结合当
    发表于 08-08 16:56 811次阅读
    浅谈Linux网络编程中的<b class='flag-5'>多进程</b>和<b class='flag-5'>多线程</b>

    华为交换机如何批量清除接口配置信息

    华为交换机如何批量清除接口配置信息
    的头像 发表于 08-14 10:43 3091次阅读

    关于Python多进程多线程详解

    进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。关于多进程多线程,教科书上最经典的一句话是“进程
    的头像 发表于 11-06 14:46 820次阅读
    关于Python<b class='flag-5'>多进程</b>和<b class='flag-5'>多线程</b>详解

    Linux系统上多线程多进程的运行效率

    关于多进程多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选
    的头像 发表于 11-10 10:54 1345次阅读
    Linux系统上<b class='flag-5'>多线程</b>和<b class='flag-5'>多进程</b>的运行效率

    你还是分不清多进程多线程吗?一文搞懂!

    你还是分不清多进程多线程吗?一文搞懂! 多进程多线程是并发编程中常见的两个概念,它们都可以用于提高程序的性能和效率。但是它们的实现方式和使用场景略有不同。 1.
    的头像 发表于 12-19 16:07 545次阅读

    使用python批量备份华为交换机配置文件

    保证PC能分别和五台交换机通信。五台交换机的IP地址如图上所示。
    的头像 发表于 01-19 09:28 1347次阅读
    使用python<b class='flag-5'>批量</b>备份<b class='flag-5'>华为</b><b class='flag-5'>交换机</b><b class='flag-5'>配置</b>文件

    Python中多线程多进程的区别

    Python作为一种高级编程语言,提供了多种并发编程的方式,其中多线程多进程是最常见的两种方式之一。在本文中,我们将探讨Python中多线程多进程的概念、区别以及如何使用
    的头像 发表于 10-23 11:48 346次阅读
    Python中<b class='flag-5'>多线程</b>和<b class='flag-5'>多进程</b>的区别