用于并发ssh连接的asyncio和parikossh、asyncio、pariko

2023-09-03 14:26:33 作者:我和闺蜜一起祸害天下

我正在尝试加快Paramiko SSH到两个网络设备的连接速度。我想为此使用asyncio,但我不确定我的实现是否正确,因为我没有看到执行时间上的任何好处,在不使用它的情况下,脚本每次执行大约6秒。其想法是,让第二台主机启动其SSH连接,而无需等待第一台主机的SSH连接建立。

以下是我当前的代码,它可以运行,但不会产生任何好处。任何如何使其发挥作用或改进的建议(如果可能)。

import paramiko
import time
import asyncio

async def sshTest(ipaddress,deviceUsername,devicePassword,sshPort): #finalDict
    try:
            print("Performing SSH Connection to the device")
            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect(ipaddress, username=deviceUsername, password=devicePassword, port=sshPort, look_for_keys=False, allow_agent=False)
            print("Channel established")         
    except Exception as e:
        print(e)       

async def main():
    print("Session 1 
")
    await sshTest('192.168.255.11','admin','admin','22')
    print("Session 2 
")
    await sshTest('192.168.254.11','admin','admin','22')

if __name__ == "__main__":
    start = time.time()
    asyncio.run(main())
    end = time.time()
    print("The time of execution of above program is :", end-start)

推荐答案

如何使用FastAPI处理非Asyncio请求

如果要异步运行此任务,则需要执行以下操作

async def main():
    ip_list = ['192.168.255.11','192.168.255.11']
    tasks = []
    for ip in ip_list:
        tasks.append(asyncio.create_task(sshTest(ip,'admin','admin','22')))
    await asyncio.gather(*tasks)