之前博文:
协程异步 SSH登录网络设备 以思科设备举例

目标:

如果编程当中,有些python库不支持异步IO,那么我们可以结合多进程的方式来实现类似协程异步的效果。

实验环境:

1.网络设备用eve模拟思科的IOS设备2.python33.使用的python库有:   a.asyncio   b.asyncssh   c.sys   d.time4.win10运行代码5.实验拓扑:


代码如下:

from netmiko import ConnectHandlerimport timeimport asyncioimport concurrent.futuresdef ssh_device(config):    net_connect = ConnectHandler(**config)    run_config = net_connect.send_command('show run')    print(run_config)async def main(host):    loop = asyncio.get_running_loop()    with concurrent.futures.ProcessPoolExecutor() as pool:        result = await loop.run_in_executor(pool, ssh_device, host)        print('custom process pool', result)if __name__ == '__main__':    # 6台需要访问的主机列表    host_list = [        {            'device_type': 'cisco_ios',            'ip': '172.16.1.101',            'username': 'admin',            'password': 'admin',            'secret': 'admin',        },        {            'device_type': 'cisco_ios',            'ip': '172.16.1.102',            'username': 'admin',            'password': 'admin',            'secret': 'admin',        },        {            'device_type': 'cisco_ios',            'ip': '172.16.1.103',            'username': 'admin',            'password': 'admin',            'secret': 'admin',        },        {            'device_type': 'cisco_ios',            'ip': '172.16.1.104',            'username': 'admin',            'password': 'admin',            'secret': 'admin',        },        {            'device_type': 'cisco_ios',            'ip': '172.16.1.200',            'username': 'admin',            'password': 'admin',            'secret': 'admin',        },        {            'device_type': 'cisco_ios',            'ip': '172.16.1.100',            'username': 'admin',            'password': 'admin',            'secret': 'admin',        }    ]    # 记录开始时间    start_time = time.time()    # 定义存放异步任务的列表    tasks = []    # 启动一个循环事件    loop = asyncio.get_event_loop()    # 遍历需要配置的主机列表,创建任务对象    for conf in host_list:        tasks.append(loop.create_task(main(conf)))    # 等待所有的异步任务执行完毕    loop.run_until_complete(asyncio.wait(tasks))    # 记录程序执行结束时间    end_time = time.time()    # 计算时间差    delta_time = end_time - start_time    print(delta_time)

执行如下:
12s左右的耗时:


如果使用同步的方式要38s左右:

©著作权归作者所有:来自51CTO博客作者J4ck0r的原创作品,如需转载,请注明出处,否则将追究法律责任

你的鼓励让我更有动力

赞赏

0人进行了赞赏支持

更多相关文章

  1. 【linux】循序渐进学运维-基础篇-at命令
  2. java使用ganymed-ssh2如何远程执行多条命令
  3. java do{} while()
  4. 20-2 orm分组和聚合以及在项目中执行的一些方法
  5. 在Oracle中,如何得到真实的执行计划?
  6. centos7下/etc/rc.local文件里配置的开机启动项不执行的解决办法
  7. 3分钟掌握思科路由器密码破解
  8. CCIE考试中常用的show,赶紧收藏吧!
  9. Hadoop学习笔记之Hadoop伪分布式环境搭建

随机推荐

  1. Android:搭建NDK环境(Cygwin+android-NDK)
  2. Android矢量动画-VectorDrawable
  3. Android studio3.6的JNI教程之helloworld
  4. android 使用TextView/EditText应该注意
  5. TextView字间距和行间距设置
  6. 使用AIDL实现Android的跨进程通信
  7. android checkbox,radiobox style自定义
  8. Phone拨号调起InCallUi流程(Phone 9.0 )(P
  9. 基于Android(安卓)XML解析与保存的实现
  10. Android Drawable Importer的使用