1. 程式人生 > >Cpython解釋器下實現並發編程

Cpython解釋器下實現並發編程

all 結束 host 服務器 param ddp 算法 正在 多核

閱讀目錄

  • 一 背景知識
  • 二 python並發編程之多進程
  • 三 python並發編程之多線程
  • 四 python並發編程之協程
  • 五 python並發編程之IO模型
  • 六 補充:paramiko模塊
  • 七 作業

一 背景知識

顧名思義,進程即正在執行的一個過程。進程是對正在運行程序的一個抽象。

進程的概念起源於操作系統,是操作系統最核心的概念,也是操作系統提供的最古老也是最重要的抽象概念之一。操作系統的其他所有內容都是圍繞進程的概念展開的。

所以想要真正了解進程,必須事先了解操作系統,點擊進入

PS:即使可以利用的cpu只有一個(早期的計算機確實如此),也能保證支持(偽)並發的能力。將一個單獨的cpu變成多個虛擬的cpu(多道技術:時間多路復用和空間多路復用+硬件上支持隔離),沒有進程的抽象,現代計算機將不復存在。

必備的理論基礎:

技術分享圖片
#一 操作系統的作用:
    1:隱藏醜陋復雜的硬件接口,提供良好的抽象接口
    2:管理、調度進程,並且將多個進程對硬件的競爭變得有序

#二 多道技術:
    1.產生背景:針對單核,實現並發
    ps:
    現在的主機一般是多核,那麽每個核都會利用多道技術
    有4個cpu,運行於cpu1的某個程序遇到io阻塞,會等到io結束再重新調度,會被調度到4個
    cpu中的任意一個,具體由操作系統調度算法決定。
    
    2.空間上的復用:如內存中同時有多道程序
    3.時間上的復用:復用一個cpu的時間片
       強調:遇到io切,占用cpu時間過長也切,核心在於切之前將進程的狀態保存下來,這樣
            才能保證下次切換回來時,能基於上次切走的位置繼續運行
技術分享圖片

本文將將著重介紹進程以及它的親戚->線程

二 python並發編程之多進程

理論:http://www.cnblogs.com/llhtjwq/p/8306621.html

鏈接:http://www.cnblogs.com/llhtjwq/p/8306636.html

三 python並發編程之多線程

理論:http://www.cnblogs.com/llhtjwq/p/8306642.html

鏈接:http://www.cnblogs.com/llhtjwq/p/8306659.html

四 python並發編程之協程

鏈接:http://www.cnblogs.com/llhtjwq/p/8306665.html

五 python並發編程之IO模型

鏈接:http://www.cnblogs.com/llhtjwq/p/8306677.html

六 補充:paramiko模塊

1. 介紹:

paramiko是一個用於做遠程控制的模塊,使用該模塊可以對遠程服務器進行命令或文件操作,值得一說的是,fabric和ansible內部的遠程管理就是使用的paramiko來現實。

2. 下載安裝

pip3 install paramiko #在python3中
技術分享圖片在python2中

3. 使用

SSHClient

用於連接遠程服務器並執行基本命令

基於用戶名密碼連接:

技術分享圖片
import paramiko

# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname=120.92.84.249, port=22, username=root, password=xxx)

# 執行命令
stdin, stdout, stderr = ssh.exec_command(df)
# 獲取命令結果
result = stdout.read()
print(result.decode(utf-8))
# 關閉連接
ssh.close()
技術分享圖片 技術分享圖片SSHClient 封裝 Transport

基於公鑰密鑰連接:

客戶端文件名:id_rsa

服務端必須有文件名:authorized_keys(在用ssh-keygen時,必須制作一個authorized_keys,可以用ssh-copy-id來制作)

技術分享圖片View Code 技術分享圖片SSHClient 封裝 Transport 技術分享圖片基於私鑰字符串進行連接

SFTPClient

用於連接遠程服務器並執行上傳下載

基於用戶名密碼上傳下載

技術分享圖片View Code

基於公鑰密鑰上傳下載

技術分享圖片View Code 技術分享圖片Demo

七 作業

題目:簡單主機批量管理工具

需求:

  1. 主機分組
  2. 主機信息配置文件用configparser解析
  3. 可批量執行命令、發送文件,結果實時返回,執行格式如下
    1. batch_run -h h1,h2,h3 -g web_clusters,db_servers -cmd "df -h" 
    2. batch_scp -h h1,h2,h3 -g web_clusters,db_servers -action put -local test.py -remote /tmp/ 
  4. 主機用戶名密碼、端口可以不同
  5. 執行遠程命令使用paramiko模塊
  6. 批量命令需使用multiprocessing並發

Cpython解釋器下實現並發編程