什麼是協程
協程我們可以看做是一種使用者空間的執行緒。
作業系統對齊存在一無所知,需要使用者自己去排程。
比如說程序,執行緒作業系統都是知道它們存在的。協程的話是使用者空間的執行緒,作業系統是不知道的。
為什麼要使用協程
與執行緒不同,協程是自己主動讓出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...