如何让我当前的代码使用 Multithreading/concurrent.futures?

问题描述

我是 netmiko/Python 脚本的新手,使用在线示例能够制作脚本来进行配置备份。备份被复制到文本文件并保存输出

目前这个备份是按顺序完成的,它不会一次连接到所有设备并进行备份。我想同时连接到所有设备。

我知道多线程或并发。futures 可以解决这个问题enter code here,但我目前无法做到。

任何人都可以建议如何修改我现有的代码以实现它。下面是代码

from netmiko import ConnectHandler
from netmiko.ssh_exception import NetMikoTimeoutException
from paramiko.ssh_exception import SSHException
from netmiko.ssh_exception import AuthenticationException
import getpass
import sys
import time
import os
from datetime import datetime

##getting system date 
day=time.strftime('%d')
month=time.strftime('%m')
year=time.strftime('%Y')
today=day+"-"+month+"-"+year
enter code here
##initialising device
 device = {
'device_type': 'cisco_ios','ip': '192.168.100.21','username': 'Cisco','password': 'Cisco','secret':'Cisco','session_log': 'log.txt'
}
##opening IP file
ipfile=open("iplist.txt")
print ("Script to take backup of devices,Please enter your credential")
device['username']=input("username ")
device['password']=getpass.getpass()
print("Enter enable password: ")
device['secret']=getpass.getpass()enter code here

##taking backup
for line in ipfile:
 try:
 device['ip']=line.strip("\n")
 print("\n\nConnecting Device ",line)
 net_connect = ConnectHandler(**device)
 net_connect.enable()
 time.sleep(1)

 with open('config.txt') as f:
    cmd = f.read().splitlines()
 print ("Reading the running config ")
 output = net_connect.send_config_set(cmd)
 output4 = "Failed"
 time.sleep(7)    
 filename=device['ip']+'-'+today+".txt"
 folder = os.path.join(today)
 file = os.path.join(folder,filename)
 os.makedirs(folder,exist_ok=True)
 saveconfig=open(file,'w+')
 print("Writing Configuration to file")
 saveconfig.write(output)
 saveconfig.close()
 time.sleep(10)
 net_connect.disconnect()
      
 print ("Configuration saved to file",filename)   
 except:
      print ("Access to "+device['ip']+" Failed,backup did not taken")
      output4 = "Failed"
      file= device['ip']+'-'+today+"Error"+".txt"
      config=open(file,'w+')
      config.write(output4)
      config.close()
      
     ipfile.close()
     print ("\nAll device backup completed")enter code here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)