Python-Day9 Paramiko模塊/進程/線程/RabbitMQ隊列

来源:http://www.cnblogs.com/cheng95/archive/2016/09/20/5882297.html
-Advertisement-
Play Games

一、Paramiko模塊 1.Paramiko安裝 Python的目錄下有個Scripts目錄,cd到這個目錄用這裡面的pip命令(如果添加的環境變數可以在cmd直接輸入命令):pip install paramiko。如果pip版本低會有提示,python -m pip install --upg ...


一、Paramiko模塊

1.Paramiko安裝

  Python的目錄下有個Scripts目錄,cd到這個目錄用這裡面的pip命令(如果添加的環境變數可以在cmd直接輸入命令):pip install paramiko。如果pip版本低會有提示,python -m pip install --upgrade pip 升級pip,再次輸入pip install paramiko。

2.SSHClient

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

#基於用戶名密碼連接:
import
paramiko # 創建SSH對象 ssh = paramiko.SSHClient() # 允許連接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連接伺服器 ssh.connect(hostname='192.168.1.122', port=22, username='root', password='123456') # 執行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 獲取命令結果 res,err = stdout.read(),stderr.read() result = res if res else err print(result.decode()) # 關閉連接 ssh.close()

 SSHClient 封裝 Transport

 1 import paramiko
 2 
 3 transport = paramiko.Transport(('192.168.1.122', 22))
 4 transport.connect(username='root', password='123456')
 5 
 6 ssh = paramiko.SSHClient()
 7 ssh._transport = transport
 8 
 9 stdin, stdout, stderr = ssh.exec_command('df')
10 print stdout.read()
11 
12 transport.close()

基於公鑰密鑰連接:

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接伺服器
ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', key=private_key)
 
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結果
result = stdout.read()
 
# 關閉連接
ssh.close()
 1 import paramiko
 2 
 3 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 4 
 5 transport = paramiko.Transport(('hostname', 22))
 6 transport.connect(username='wupeiqi', pkey=private_key)
 7 
 8 ssh = paramiko.SSHClient()
 9 ssh._transport = transport
10 
11 stdin, stdout, stderr = ssh.exec_command('df')
12 
13 transport.close()
SSHClient 封裝 Transport

3.SFTPClient

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

import paramiko
 
transport = paramiko.Transport(('hostname',22))
transport.connect(username='wupeiqi',password='123')
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至伺服器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 將remove_path 下載到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()
 1 import paramiko
 2  
 3 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 4  
 5 transport = paramiko.Transport(('hostname', 22))
 6 transport.connect(username='wupeiqi', pkey=private_key )
 7  
 8 sftp = paramiko.SFTPClient.from_transport(transport)
 9 # 將location.py 上傳至伺服器 /tmp/test.py
10 sftp.put('/tmp/location.py', '/tmp/test.py')
11 # 將remove_path 下載到本地 local_path
12 sftp.get('remove_path', 'local_path')
13  
14 transport.close()
基於公鑰密鑰上傳下載

 二、進程與線程

1.進程與線程介紹和關係

  線程:線程是操作系統能夠進行運算調度的最小單位嗎,是一串指令的集和。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。

  進程:進程是具有一定獨立功能的程式關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。

1)一個程式至少有一個進程,一個進程至少有一個線程

2)同一個進程下的線程共用記憶體空間,進程的記憶體是獨立的

3)同一個進程的線程之間可以直接交流,兩個進程想通信,必須通過一個中間代理來實現

4)創建新線程很簡單, 創建新進程需要對其父進程進行一次克隆

5)一個線程可以控制和操作同一進程里的其他線程,但是進程只能操作子進程

無論你啟多少個線程,你有多少個cpu, Python在執行的時候會淡定的在同一時刻只允許一個線程運行

2.Python threading模塊

#直接調用
import threading
import time
def sayhi(num): #定義每個線程要運行的函數
    print("running on number:%s" %num)
    time.sleep(3)
 
t1 = threading.Thread(target=sayhi,args=(1,)) #生成一個線程實例
t2 = threading.Thread(target=sayhi,args=(2,)) #生成另一個線程實例
 
t1.start() #啟動線程
t2.start() #啟動另一個線程
 

執行完會發現不是執行t1的print後  running on number:1  sleep 3秒再執行t2,而是t1和t2的print幾乎同時出結果後

running on number:1

running on number:2

等待3s結束,下麵繼承式寫了寫了開始和結束的輸出看著更明顯一些。

#繼承式調用
class MyThread(threading.Thread):
    def __init__(self,n,sleep_time):
        super(MyThread,self).__init__()
        self.n =  n
        self.sleep_time = sleep_time
    def run(self):
        print("runnint task ",self.n )
        time.sleep(self.sleep_time)
        print("task done,",self.n )


t1 = MyThread("t1",2)
t2 = MyThread("t2",4)

t1.start()
t2.start()

'''
runnint task  t1
runnint task  t2
main thread....
task done, t1
task done, t2
'''

3.Join & Daemon

 threading的join,一旦調用會等到調用它的線程執行完畢再執行其他的線程,上代碼看結果

import threading
import time
def sayhi(num): #定義每個線程要運行的函數
    print("running on number:%s" %num)
    time.sleep(3)
    print("%s睡完了" %num)

t1 = threading.Thread(target=sayhi,args=(1,)) #生成一個線程實例
t2 = threading.Thread(target=sayhi,args=(2,)) #生成另一個線程實例

t1.start() #啟動線程
t1.join()  #-----------------------------等t1執行完----------------------------------
t2.start() #啟動另一個線程

'''執行結果:
running on number:1
1睡完了
running on number:2
2睡完了
'''

 

import threading
import time
def sayhi(num): #定義每個線程要運行的函數
    print("running on number:%s" %num)
    time.sleep(3)
    print("%s睡完了" %num)

t1 = threading.Thread(target=sayhi,args=(1,)) #生成一個線程實例
t2 = threading.Thread(target=sayhi,args=(2,)) #生成另一個線程實例
t2.setDaemon(True)

t1.start() #啟動線程
t1.join() #等t1執行完
t2.start() #啟動另一個線程

'''
running on number:1
1睡完了
running on number:2   #主進程執行完殺死子進程
'''

 4.線程鎖

  一個進程下可以啟動多個線程,多個線程共用父進程的記憶體空間,也就意味著每個線程可以訪問同一份數據,每個線程在要修改公共數據時,為了避免自己在還沒改完的時候別人也來修改此數據,可以給這個數據加一把鎖, 這樣其它線程想修改此數據時就必須等待你修改完畢並把鎖釋放掉後才能再訪問此數據。

import time
import threading
 
def addNum():
    global num #在每個線程中都獲取這個全局變數
    print('--get num:',num )
    time.sleep(1)
    lock.acquire() #修改數據前加鎖
    num  -=1 #對此公共變數進行-1操作
    lock.release() #修改後釋放
 
num = 100  #設定一個共用變數
thread_list = []
lock = threading.Lock() #生成全局鎖
for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)
 
for t in thread_list: #等待所有線程執行完畢
    t.join()
 
print('final num:', num )

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 接著上期的文章繼續說非同步與並行 並行來自於線程的方法實現,非同步不一定。這句話,暈倒一大片程式員。 首先,多線程式是實現非同步一種方法,兩者的共同目的:使主線程保持對用戶操作的實時響應,如點擊、拖拽、輸入字元等。使主程式看起來實時都保持著等待用戶響應的狀態,而後臺卻有若幹件事情在自己乾。按消耗資源所在地 ...
  • 一、B/S和C/S 1、C/S C/S 架構是一種典型的兩層架構,其全程是Client/Server,即客戶端伺服器端架構,其客戶端包含一個或多個在用戶的電腦上運行的程式,而伺服器端有兩種,一種是資料庫伺服器端,客戶端通過資料庫連接訪問伺服器端的數據;另一種是Socket伺服器端,伺服器端的程式通過 ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Syste ...
  • 想法:將屏幕截圖作為程式背景圖,在之上彈出提示視窗,選擇確定後進行定時圖片隨機位置顯示。(支持ESC鍵退出) 需要添加的控制項:Timer 需要修改的Form1屬性為下圖紅色區域: 資源文件的添加:添加->新建項->資源文件 ESC鍵退出程式: 在Form1.Designer.cs中增加 this.K ...
  • 相同點: 1、都可以被繼承 2、都不能被實例化 3、都可以包含方法聲明 4、派生類必須實現未實現的方法 區別: 1、抽象基類可以定義欄位、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法聲明,不能包含欄位。 2、抽象類是一個不完整的類,需要進一步細化,而介面是一個行為規範。微軟的自定義介面總是 ...
  • 1.出現invalid signature 如果是微信web開發著工具出現的話,那麼可以用手機試試看,是不是有問題。 2.出現支付一閃而過 一般是授權問題,需要在微信支付-開發配置-測試授權目錄裡面添加授權目錄(註意是區分大小寫的,精確到Controller就行了,也就是二級目錄) 2.Redire ...
  • 使用jQuery調用WebApi有時會遇到跨域的問題,今天介紹一種可以簡單解決跨域問題的方法。 當我們跨域請求WebAPI的時候會提示以下信息: XMLHttpRequest cannot load http://localhost:9641/api/news/GetData. No 'Access ...
  • 0 Asp.Net Core 項目實戰之許可權管理系統(0) 無中生有 1 Asp.Net Core 項目實戰之許可權管理系統(1) 使用AdminLTE搭建前端 2 Asp.Net Core 項目實戰之許可權管理系統(2) 功能及實體設計 3 Asp.Net Core 項目實戰之許可權管理系統(3) 通過 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...