Python中Paramiko協程方式詳解

2022-08-19 09:48:07 字數 3261 閱讀 7501

什麼是協程

協程我們可以看做是一種使用者空間的執行緒。

作業系統對齊存在一無所知,需要使用者自己去排程。

比如說程序,執行緒作業系統都是知道它們存在的。協程的話是使用者空間的執行緒,作業系統是不知道的。

為什麼要使用協程

與執行緒不同,協程是自己主動讓出cpu,並交付它期望的下乙個協程執行,而不是在任何時候都有可能被系統排程打斷。因此協程的使用更加清晰易懂,並且多數情況下不需要鎖機制。與執行緒相比,協程的切換由程式控制,發生在使用者空間而非核心控制項,因此切換的代價非常的小。某種意義上,協程與執行緒的關係類似與執行緒與程序的關係,多個協程會在同乙個執行緒的上下文之中執行。這樣程式不多執行緒好理解。來看乙個檢視。

比如說乙個程序它有多個執行緒,但是乙個執行緒內它又有多個協程,然後這些協程就是說,有使用者,就是程式設計師來說定義它在什麼時候交出控制權,給其它協程來進行一些操作。

gevent簡介

python乙個很著名的乙個協程庫就是

gevent

。gevent

是乙個基於

libev

的併發庫。它為各種併發和網路相關的任務提供了鄭潔的

api。在

gevent

中用到的主要模式是

greenlet

,它是以

c擴充套件模組形式接入

python

的輕量級協程。

greenlet

全部執行在主程式作業系統程序的內部,但它們被協作式地排程。

python gevent api

gevent.spawn(func,args)建立

greenlet

gevent.sleep(seconds)greenlet上下文切換

gevent.joinall(greenlets)阻塞當前流程,執行所有給定

greenlet

我們來看一下檢視。

比如說這段**它得執行是這樣的,不如說它gevent建立出來的協程它

sleep

就是切換出來,就會到其它程式中去執行。然後其它程式再會讓它在切換回來,它再回到原來的流程去執行這樣,就做了乙個互動式的操作。這樣這張圖就很明白的表名了這些。

利用gevent實現

對原有操作進行修改,手動切換。

就是把這個程式切換出去,然給其它協程去操作。

開啟編輯器

怎麼改呢,這個是原來的查詢遠端機器的配置,這個比如說查詢它的當前的時間。data的話我們,這個都是在之前的課程講過。

process

比如說ssh

它這個配置把它的

section

傳過去。

比如說ssh0

然後我們如何修改呢,其實就是在原有的基礎上讓它手動的去切換,怎麼切換我們就gevent_process,例如說建立出這個物件我就把它切換出去,切換出去的時候,首先要引入這個

gevent

這個庫,呼叫它的

sleep

讓它手動的切換出去。不如說

connect

的時候在切換出去。

建立gevent協程

然後我們就開始在主函式裡面。

就建立協程,建立協程其實很簡單比如它乙個event=gevent.spawn,把協程的函式和它的引數傳遞進來。比如說它就是乙個

不如說我們讓它joinall,

joinall

是乙個陣列,然後這我們應該申請乙個

events

,把新請的這個

events

放進來。我們把這個

events

阻塞,讓這個程序等待所有協程的結束。我們看一下。

多個協程的話就非常簡單了,我們以前也看到過,比如說這個task_num是

6我們就把它遍歷,然後這個

section

就是這個樣子就是

然後把section傳遞進去,我們可以看到比如說我們可以查詢六次,對六個機器進行查詢。

然後我們這樣就完成了,我們可以看一下它的耗時,把它耗時給列印出來,就是兩個的時間差

它花費了3.80秒,我們下去的話大概可以根據之前的經驗,把這個順序執行跟這個協程式的執行,協程式的具體來說就是就是這台機器伺服器的狀態。這個過程它所發生時間其實它還是乙個時間優勢的,只不過是在這個地方它是時間優勢體現的不明顯,是因為我們只有在應用程序,然後在主動的去切換這個協程。然後在這

parmiko

的內部我們其實是沒辦法用,利用這個協程的切換來,因為它內部是封裝起來的。只允許呼叫它現有的這些函式,我們中間是沒辦法打斷它的。

只有在這個具體的執行的時候,比如說兩個run_cmd之間我們可以加乙個協程讓它切出去,比如說我這有查詢乙個其它的。

比如說之前的查詢它的記憶體,我可以在這在切一次。

這樣的話就主動地切換,就是說利用協程之間的操作的話,如果多個協程之間

我們這樣切換的話它其實最終的效果是比順序執行的時候要好,它是利用了協程的這個有點。

等待gevent協程結束。

python安裝paramiko模組

參考 一 依賴模組 pycrypto the python cryptography toolkit wget wget 三 安裝 1 安裝pycrypto tar zxvf pycrypto 2.0.1.tar.gz cd pycrypto 2.0.1 python setup.py build ...

python安裝paramiko模組

一 簡介 paramiko是用python語言寫的乙個模組,遵循ssh2協議,支援以加密和認證的方式,進行遠端伺服器的連線。由於使用的是python這樣的能夠跨平台執行的語言,所以所有python支援的平台,如linux,solaris,bsd,macos x,windows等,paramiko都可...

python模組學習 Paramiko

目錄 簡介與安裝 paramiko中的幾個基礎名詞 1.sshclient常用的方法介紹 1.1 connect 1.2 set missing host key policy 1.3 exec command 1.4 open sftp 1.5 sshclient常用的方法舉例 金鑰連線方式 ss...