如果使用的庫不支援非同步,可以使用多程式並將其轉化為非同步物件
目標:
登入後複製
如果程式設計當中,有些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)
執行如下:
12s左右的耗時:
如果使用的庫不支援非同步,可以使用多程式並將其轉化為非同步物件
如果使用同步的方式要38s左右:
如果使用的庫不支援非同步,可以使用多程式並將其轉化為非同步物件
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69999013/viewspace-2769819/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉]阻塞/非阻塞與同步/非同步非同步
- 程式執行緒、同步非同步、阻塞非阻塞、併發並行執行緒非同步並行
- Socket程式設計中的同步、非同步、阻塞和非阻塞(轉)程式設計非同步
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- 淺析"對arguments物件使用Array.prototype.slice()可以將其轉化為陣列"物件陣列
- ♻️同步和非同步;並行和併發;阻塞和非阻塞非同步並行
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- 【OS】同步非同步/阻塞非阻塞、併發並行序列的區分非同步並行
- 同步、非同步、阻塞、非阻塞的區別非同步
- [非專業翻譯] Mapster - 非同步支援非同步
- 同步與非同步 阻塞與非阻塞非同步
- 程式與執行緒、同步與非同步、阻塞與非阻塞、併發與並行執行緒非同步並行
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- 乾坤大挪移,如何將同步阻塞(sync)三方庫包轉換為非同步非阻塞(async)模式?Python3.10實現。非同步模式Python
- 聊聊執行緒與程式 & 阻塞與非阻塞 & 同步與非同步執行緒非同步
- 併發-0-同步/非同步/阻塞/非阻塞/程式/執行緒非同步執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- 真正的 Tornado 非同步非阻塞非同步
- [譯] 非同步程式設計:阻塞與非阻塞非同步程式設計
- js獲取頁面地址引數並將其轉化為一個物件JS物件
- 怎樣理解阻塞非阻塞與同步非同步的區別?非同步
- 透過一個示例形象地理解C# async await 非並行非同步、並行非同步、並行非同步的併發量控制C#AI並行非同步
- 大白話搞懂什麼是同步/非同步/阻塞/非阻塞非同步
- socket阻塞與非阻塞,同步與非同步、I/O模型非同步模型
- 網路IO之阻塞、非阻塞、同步、非同步總結非同步
- 從同步原語看非阻塞同步以及Java中的應用Java