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

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

3天內(nèi)不再提示

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

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

實驗原理:

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

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

實驗拓撲:

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

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

版本:python3.9

實驗步驟:

一、ssh配置:

##創(chuàng)建秘鑰
[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()
#等待網(wǎng)絡設備回應
command.send("system
")
#執(zhí)行具體的命令
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__':
#執(zhí)行命令,查看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)

三、協(xié)程腳本與測試:

coroutine_ssh.py: 使用協(xié)程調(diào)用ssh_multicmd函數(shù)進行快速批量配置

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)
#執(zhí)行的任務函數(shù)
result=ssh_multicmd('192.168.56.20'+str(i),'prin','Huawei@123',commands,i,verbose=False)
print("end",i)
returnresult


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

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

協(xié)程測試結果: 可以看到,多個任務‘同時’執(zhí)行,節(jié)約時間。

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()#得到內(nèi)核數(shù)的方法
pool=ProcessPool(cpus)#有效控制并發(fā)進程或者線程數(shù),默認為內(nèi)核數(shù)(推薦)

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

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

forinfoinresults:
print(info.get())


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

#調(diào)用join之前,先調(diào)用close函數(shù),否則會出錯。執(zhí)行完close后不會有新的進程加入到pool,join函數(shù)等待所有子進程結束
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)

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

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








審核編輯:劉清

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

    關注

    0

    文章

    277

    瀏覽量

    19878
  • SSH
    SSH
    +關注

    關注

    0

    文章

    181

    瀏覽量

    16261
  • python
    +關注

    關注

    54

    文章

    4758

    瀏覽量

    84289
  • 華為交換機
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6287

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

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

收藏 人收藏

    評論

    相關推薦

    使用paramiko在eNSP的交換機批量創(chuàng)建VLAN

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

    多線程多進程的區(qū)別

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

    淺談多進程多線程的選擇

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

    協(xié)線程有什么區(qū)別

    協(xié)線程的區(qū)別協(xié)線程的共同目的之一是實現(xiàn)系統(tǒng)資源的上下文調(diào)用,不過它們的實現(xiàn)層級不同;
    發(fā)表于 12-10 06:23

    python多線程多進程對比

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

    LINUX系統(tǒng)下多線程多進程性能分析

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

    如何選好多線程多進程

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

    多進程多線程的深度比較

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

    淺談Linux網(wǎng)絡編程中的多進程多線程

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

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

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

    關于Python多進程多線程詳解

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

    Linux系統(tǒng)上多線程多進程的運行效率

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

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

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

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

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

    Python中多線程多進程的區(qū)別

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