如果使用的库不支持异步,可以使用多进程并将其转化为异步对象

网友投稿 234 2022-09-11


如果使用的库不支持异步,可以使用多进程并将其转化为异步对象

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

目标:

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

实验环境:

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

代码如下:

from netmiko import ConnectHandler import time import asyncio import concurrent.futures def 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)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:nofollow权重说明 nofollow是否传递权重?(nofollow标签属性通常有两种使用方法)
下一篇:mybatis实体类字段大小写及字段获取不到值问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~