网工Python——netdev(异步并行),举例看看ssh多台交换机执行命令异步和同步耗时对比实验:

代码简介:ssh两台华为交换机10.30.0.1和10.30.8.3,执行dis vlan summary,之后结算同步和异步耗时对比!

ip_list.txt文件内容是

网工Python---netdev(异步并行),举例看看ssh多台交换机执行命令异步和同步耗时对比_第1张图片

同步方式的代码sshSW_tongbu.py,耗时40.34秒

from netmiko import ConnectHandler
import time
 
f = open('ip_list.txt')
start_time = time.time()
 
for ips in f.readlines():
 ip = ips.strip()
 SW = {
  'device_type': 'huawei',
  'ip': ip,
  'username': 'admin@123',
  'password': 'password123', #填写你的交换机密码
 }
 connect = ConnectHandler(**SW)
 print ("Sucessfully connected to " + SW['ip'])
 config_commands = ['dis vlan summary','quit']
 output = connect.send_config_set(config_commands)
 print (output)
 
print ('Time elapsed: %.2f'%(time.time()-start_time))

执行结果:

PS D:\Python_Files\python2020item\netdev_demo> python.exe .\sshSW_tongbu.py
Sucessfully connected to 10.30.0.1
system-view
Enter system view, return user view with Ctrl+Z.
[S7706]dis vlan summary
Static VLAN:
Total 58 static VLAN.
  1 3 10 37 50 to 55 80 to 85 101 to 116
  201 to 203 300 400 to 402 801 to 805
  900 999 to 1001 2001 2032 to 2039 4000

Dynamic VLAN:
Total 0 dynamic VLAN.

Reserved VLAN:
Total 0 reserved VLAN.
[S7706]quit

Sucessfully connected to 10.30.8.3
system-view
Enter system view, return user view with Ctrl+Z.
[S5700-3]dis vlan summary
Static vlan:
Total 25 static vlan.
  1 50 to 54 101 to 115 1000 to 1001 1314
  to 1315

Dynamic vlan:
Total 0 dynamic vlan.

Reserved vlan:
Total 0 reserved vlan.
[S5700-3]quit

Time elapsed: 40.34
PS D:\Python_Files\python2020item\netdev_demo>

异步方式的代码sshSW_tongbu.py耗时12.69秒

import asyncio
import netdev
import time
 
async def task(dev):
 async with netdev.create(**dev) as ios:
  commands = ['dis vlan summary','quit']
  out = await ios.send_config_set(commands)
  print(out)
 
async def run():
 devices = []
 f = open('ip_list.txt')
 for ips in f.readlines():
   ip = ips.strip()
   dev = { 'username' : 'admin@123',
   'password' : 'password123', #填写你的交换机密码
   'device_type': 'hp_comware', #华为 华三测试用这个type,因为没有huawei huasan关键字的type,netdev目前2020年仅支持它罗列的操作系统
   'host': ip
   }
   devices.append(dev)
   tasks = [task(dev) for dev in devices]
   await asyncio.wait(tasks)
 
start_time = time.time()
asyncio.run(run())
print ('Time elapsed: %.2f'%(time.time()-start_time))

'''
备注:netdev目前2020年仅支持它罗列的操作系统
ValueError: Unsupported device_type: currently supported platforms are: arista_eos
aruba_aos_6
aruba_aos_8
cisco_asa
cisco_ios
cisco_ios_xe
cisco_ios_xr
cisco_nxos
fujitsu_switch
hp_comware
hp_comware_limited
hw1000
juniper_junos
mikrotik_routeros
terminal
ubiquity_edge
'''

执行结果:

PS D:\Python_Files\python2020item\netdev_demo> python.exe .\sshSW_yibu.py
C:\Python38\lib\site-packages\asyncssh\crypto\ec.py:143: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
  pub = ec.EllipticCurvePublicNumbers.from_encoded_point(curve(),
system-view
Enter system view, return user view with Ctrl+Z.
[ZD-CO-S7706]dis vlan summary
Static VLAN:
Total 58 static VLAN.
  1 3 10 37 50 to 55 80 to 85 101 to 116
  201 to 203 300 400 to 402 801 to 805
  900 999 to 1001 2001 2032 to 2039 4000

Dynamic VLAN:
Total 0 dynamic VLAN.

Reserved VLAN:
Total 0 reserved VLAN.
[S7706]quit

system-view
Enter system view, return user view with Ctrl+Z.
[S7706]dis vlan summary
Static VLAN:
Total 58 static VLAN.
  1 3 10 37 50 to 55 80 to 85 101 to 116
  201 to 203 300 400 to 402 801 to 805
  900 999 to 1001 2001 2032 to 2039 4000

Dynamic VLAN:
Total 0 dynamic VLAN.

Reserved VLAN:
Total 0 reserved VLAN.
[S7706]quit

system-view
Enter system view, return user view with Ctrl+Z.
[S5700-3]dis vlan summary
Static vlan:
Total 25 static vlan.
  1 50 to 54 101 to 115 1000 to 1001 1314
  to 1315

Dynamic vlan:
Total 0 dynamic vlan.

Reserved vlan:
Total 0 reserved vlan.
[S5700-3]quit

Time elapsed: 12.69
PS D:\Python_Files\python2020item\netdev_demo>

可以看出多台设备ssh并操作,异步方式耗时少很多,所以以后多用用异步,提高效率!!!

记得安装netdev,此外我看见安装netdev时候安装了asyncssh库,其实你看asyncssh的async的英文就是异步意思,就大概知道netdev有处理异步工作的相关能力了!