精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分別使用多線程多進程協程+paramiko在華為交換機批量快速進行配置

網絡技術干貨圈 ? 來源:CSDN ? 2024-01-16 09:13 ? 次閱讀

實驗原理:

python對于網絡設備的操作屬于I/O密集型,在腳本運行時,存在大量的等待時間。我們便可以利用這些空閑的時間,進行其他的操作。

由于python解釋器在同一時間只能運行一個線程,所以不存在真正意義上的同時配置不同的設備。在多線程、多進程和協程中推薦使用協程這種方法,讓一個線程不斷的切換執行的任務。

實驗拓撲:

fcd04bae-b407-11ee-8b88-92fbcf53809c.png

cloud連接本機,ip地址為192.168.56.1,五臺交換機的配置的地址為192.168.1.201~205?,F在通過paramiko,ssh進入五臺設備,并且在五臺設備上分別創建將192.168.56.0 0.0.0.255通告進入OSPF。

版本:python3.9

實驗步驟:

一、ssh配置:

##創建秘鑰
[sw2]dsalocal-key-paircreate

##配置SSH認證類型(密碼/其他)
[sw2]sshuserprinauthentication-typepassword
[sw2]sshuserprinservice-typestelnet
[sw2]stelnetserverenable

##配置認證模式
[sw2]user-interfacevty04
[sw2-ui-vty0-4]authentication-modeaaa//配置認證模式
[sw2-ui-vty0-4]protocolinboundssh//允許ssh連接虛擬終端

##配置本地用戶信息
[sw2]aaa
[sw2-aaa]local-userprinpasswordcipherHuawei@123
[sw2-aaa]local-userprinprivilegelevel15
[sw2-aaa]local-userprinservice-typessh

二、paramiko腳本:

ssh_device.py: 使用paramiko連接設備

importtime
importparamiko


defssh_multicmd(ip,username,password,cmd_list,asy_id,wait_time=2,verbose=True):
try:
print('tryssh'+str(asy_id))
ssh=paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,password,timeout=5,compress=True)
print("Youhavesuccessfullyconnectto"+ip+'
')
exceptparamiko.ssh_exception.AuthenticationException:
print("Userauthenticationfailedfor"+ip+".")
return

#激活交互式shell
command=ssh.invoke_shell()
#等待網絡設備回應
command.send("system
")
#執行具體的命令
forcmdincmd_list:
command.send(cmd)
time.sleep(wait_time)
#獲取路由器返回信息
output=command.recv(65535)
x=output.decode('ascii')
#關閉連接
ssh.close()
ifverbose:
print(x)
returnx


if__name__=='__main__':
#執行命令,查看showversion的值,和配置OSPF
commands=['ospf1
','area0
','network192.168.56.00.0.0.255
']
return_results=ssh_multicmd('192.168.56.205','prin','Huawei@123',commands,1)

三、協程腳本與測試:

coroutine_ssh.py: 使用協程調用ssh_multicmd函數進行快速批量配置

fromssh_deviceimportssh_multicmd

importgevent
fromgeventimportmonkey

monkey.patch_all()

commands=['ospf1
','area0
','network192.168.56.00.0.0.255
']


defget_ssh_result(i):
print("start",i)
#執行的任務函數
result=ssh_multicmd('192.168.56.20'+str(i),'prin','Huawei@123',commands,i,verbose=False)
print("end",i)
returnresult


#同時執行5個任務,id為1-5
tasks=[gevent.spawn(get_ssh_result,i)foriin[1,2,3,4,5]]
all_result=gevent.joinall(tasks)

#獲取執行信息
forxinall_result:
print(x.get())

協程測試結果: 可以看到,多個任務‘同時’執行,節約時間。

fce5146c-b407-11ee-8b88-92fbcf53809c.png

四、多進程/多線程腳本配置和測試

multiprocessing_ssh.py: 使用多進程或者多線程來配置腳本

fromssh_deviceimportssh_multicmd
frommultiprocessingimportcpu_count,PoolasProcessPool
frommultiprocessing.poolimportThreadPool
frommultiprocessingimportfreeze_support

results=[]
commands=['ospf1
','area0
','network192.168.56.00.0.0.255
']


#多進程
defmulti_process(ip_prefix,suffix,username,password,commands):
freeze_support()
cpus=cpu_count()#得到內核數的方法
pool=ProcessPool(cpus)#有效控制并發進程或者線程數,默認為內核數(推薦)

#設置對應函數和傳入的參數
foriinsuffix:
result=pool.apply_async(ssh_multicmd,args=(ip_prefix+str(i),username,password,commands,i,2,False))
results.append(result)

#調用join之前,先調用close函數,否則會出錯。執行完close后不會有新的進程加入到pool,join函數等待所有子進程結束
pool.close()
pool.join()

forinfoinresults:
print(info.get())


#多線程
defmulti_thread(ip_prefix,suffix,username,password,commands):
pool=ThreadPool(100)
#設置對應函數和傳入的參數
foriinsuffix:
result=pool.apply_async(ssh_multicmd,args=(ip_prefix+str(i),username,password,commands,i,2,False))
results.append(result)

#調用join之前,先調用close函數,否則會出錯。執行完close后不會有新的進程加入到pool,join函數等待所有子進程結束
pool.close()
pool.join()

forinfoinresults:
print(info.get())


if__name__=='__main__':
#多線程
#multi_thread('192.168.56.20',range(1,6),'prin','Huawei@123',commands)
#多進程
multi_process('192.168.56.20',range(1,6),'prin','Huawei@123',commands)

協程測試結果: 同樣多個任務‘同時’進行,節約了時間。

fcf9869a-b407-11ee-8b88-92fbcf53809c.png








審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 多線程
    +關注

    關注

    0

    文章

    277

    瀏覽量

    19923
  • SSH
    SSH
    +關注

    關注

    0

    文章

    185

    瀏覽量

    16304
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84455
  • 華為交換機
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6298

原文標題:分別使用多線程多進程協程+paramiko在華為交換機批量快速進行配置(eNSP模擬器)

文章出處:【微信號:網絡技術干貨圈,微信公眾號:網絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用paramiko在eNSP的交換機批量創建VLAN

    cloud連接本機,ip地址為192.168.56.1,五臺交換機配置的地址為192.168.1.11~55?,F在通過paramiko,ssh進入五臺設備,并且在五臺設備上分別創建v
    的頭像 發表于 01-20 17:52 ?1587次閱讀
    使用<b class='flag-5'>paramiko</b>在eNSP的<b class='flag-5'>交換機</b>中<b class='flag-5'>批量</b>創建VLAN

    多線程多進程的區別

    6.你的數據庫一會又500個連接數,一會有10個,你分析一下情況7.udp和tcp的區別8.多線程多進程的區別9.有一臺web服務器,你選擇用多線程還是多進程,...
    發表于 07-19 07:21

    淺談多進程多線程的選擇

    魚還是熊掌:淺談多進程多線程的選擇關于多進程多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,
    發表于 08-24 07:38

    線程有什么區別

    線程的區別線程的共同目的之一是實現系統資源的上下文調用,不過它們的實現層級不同;
    發表于 12-10 06:23

    python多線程多進程對比

    段可以干多件事,譬如可以邊吃飯邊看電視;在Python中,多線程 雖然是嚴格上來說是串行,但卻比一般的串行程序執行效率高得很。 一般的串行程序,在程序阻塞的時候,只能干等著,不能去做其他事
    發表于 03-15 16:42

    LINUX系統下多線程多進程性能分析

    采用多進程處理多個任務,會占用很多系統資源(主要是CPU 和內存的使用)。在LINUX 中,則對這種弊端進行了改進,在用戶態實現了多線程處理多任務。本文系統論述了多線程
    發表于 08-13 08:31 ?20次下載

    如何選好多線程多進程

    關于多進程多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選
    的頭像 發表于 05-11 16:16 ?2943次閱讀
    如何選好<b class='flag-5'>多線程</b>和<b class='flag-5'>多進程</b>

    多進程多線程的深度比較

    嵌入式Linux中文站,關于多進程多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”。這句話應付考試基本上夠了,但如果在工作中遇
    發表于 04-02 14:42 ?461次閱讀

    淺談Linux網絡編程中的多進程多線程

    在Linux網絡編程中,我們應該見過很多網絡框架或者server,有多進程的處理方式,也有多線程處理方式,孰好孰壞并沒有可比性,首先選擇多進程還是多線程我們需要考慮業務場景,其次結合當
    發表于 08-08 16:56 ?805次閱讀
    淺談Linux網絡編程中的<b class='flag-5'>多進程</b>和<b class='flag-5'>多線程</b>

    華為交換機如何批量清除接口配置信息

    華為交換機如何批量清除接口配置信息
    的頭像 發表于 08-14 10:43 ?3054次閱讀

    關于Python多進程多線程詳解

    進程(process)和線程(thread)是操作系統的基本概念,但是它們比較抽象,不容易掌握。關于多進程多線程,教科書上最經典的一句話是“進程
    的頭像 發表于 11-06 14:46 ?816次閱讀
    關于Python<b class='flag-5'>多進程</b>和<b class='flag-5'>多線程</b>詳解

    Linux系統上多線程多進程的運行效率

    關于多進程多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選
    的頭像 發表于 11-10 10:54 ?1323次閱讀
    Linux系統上<b class='flag-5'>多線程</b>和<b class='flag-5'>多進程</b>的運行效率

    你還是分不清多進程多線程嗎?一文搞懂!

    你還是分不清多進程多線程嗎?一文搞懂! 多進程多線程是并發編程中常見的兩個概念,它們都可以用于提高程序的性能和效率。但是它們的實現方式和使用場景略有不同。 1.
    的頭像 發表于 12-19 16:07 ?540次閱讀

    使用python批量備份華為交換機配置文件

    保證PC能分別和五臺交換機通信。五臺交換機的IP地址如圖上所示。
    的頭像 發表于 01-19 09:28 ?1322次閱讀
    使用python<b class='flag-5'>批量</b>備份<b class='flag-5'>華為</b><b class='flag-5'>交換機</b><b class='flag-5'>配置</b>文件

    Python中多線程多進程的區別

    Python作為一種高級編程語言,提供了多種并發編程的方式,其中多線程多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程多進程的概念、區別以及如何使用
    的頭像 發表于 10-23 11:48 ?318次閱讀
    Python中<b class='flag-5'>多線程</b>和<b class='flag-5'>多進程</b>的區別