Cpython解釋器下實現並發編程
閱讀目錄
- 一 背景知識
- 二 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七 作業
題目:簡單主機批量管理工具
需求:
- 主機分組
- 主機信息配置文件用configparser解析
- 可批量執行命令、發送文件,結果實時返回,執行格式如下
- batch_run -h h1,h2,h3 -g web_clusters,db_servers -cmd "df -h"
- batch_scp -h h1,h2,h3 -g web_clusters,db_servers -action put -local test.py -remote /tmp/
- 主機用戶名密碼、端口可以不同
- 執行遠程命令使用paramiko模塊
- 批量命令需使用multiprocessing並發
Cpython解釋器下實現並發編程