![](/img/trans.png)
[英]Extract output of Juniper Devices and save to dictionary file via netmiko python
[英]Not getting output for multiprocessing netmiko multiple devices
使用多处理无法获取多设备连接的输出
我尝试了以下代码:
import multiprocessing as mp
from netmiko import ConnectHandler
import netmiko
import re
from datetime import datetime
def get_ip (input):
return(re.findall(r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', input))
def make_connection (ip, username, password):
device_connect = ConnectHandler(device_type='cisco_nxos', ip=ip, username=username, password=password)
output = device_connect.send_command("sh hostname")
print(output)
device_connect.disconnect()
def get_ips_nexus (file_name):
for line in open(file_name, 'r').readlines():
line = get_ip(line)
for ip in line:
ips_nexus.append(ip)
ips_nexus = []
get_ips_nexus("ips-Copy.txt")
print(ips_nexus)
username = 'x.x.x.x'
password = 'xxxxxxxx'
startTime = datetime.now()
processes = []
for ip in ips_nexus:
print('***********')
print(ip)
print('***********')
p = mp.Process(target=make_connection, args=(ip, username, password))
processes.append(p)
p.start()
print('!!!!!!!!!!!!!!!!!!!!!!!!!')
for p in processes:
print(p)
p.join()
print(datetime.now() - startTime
我只得到打印ip而不是sh主机名的netmiko连接的输出。
我只想使用多处理来实现多设备连接!!!
请帮忙。
您缺少if __name__ == "__main__"
子句!
将其添加到for-循环的上方:
if __name__ == "__main__": # add this
for ip in ips_nexus:
print('***********')
print(ip)
print('***********')
p = mp.Process(target=make_connection, args=(ip, username, password))
processes.append(p)
p.start()
print('!!!!!!!!!!!!!!!!!!!!!!!!!')
首先:如果您运行自己的代码,则python解释器会将其导入为“ 主 ”文件。 您可以通过添加print(__name__)
来尝试。 无论如何,如果您使用multiprocessing
启动新进程,则python解释器会再次导入您的代码,并将其作为额外进程和新Skript运行! 好吧,如果它再次达到(对于您而言)这部分:
p = mp.Process(target=make_connection, args=(ip, username, password))
它将再次开始一个新过程,再次导入它,依此类推。 最后,您将有一个无限循环,它每次都会以新进程的形式启动代码! 这就是为什么您必须添加( 重要 ) if __name__ == "__main__"
子句的原因! 通过添加此名称, __name__
将不会在首次调用新进程后成为__main__
!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.