python之路--paramiko實現簡單主機管理
執行緒池
首先怎麼理解執行緒池呢?
比如有十臺機器(執行緒池的大小),現在要加工一百件產品(要執行的任務)。
一件產品加工完之後(任務完成)機器(執行緒)開始加工下一件產品(新增任務到執行緒池)。
因為不能有100件產品需要加工就買100臺機器。也不能因為到最後要加工不到十件產品讓十臺機器都開著。
那麼就應該讓機器如果發現沒有產品需要加工的時候就停止執行。
將產品按照順序排列。十臺機器開始加工,機器效能可能不一樣,產品也可能存在不一樣,所以加工的時間也不一致。
有的機器可能快一點。只要一臺機器加工完了當前產品,那麼就從剩下的產品佇列中取產品。直到發現再沒有產品可取了。
那麼就停止當前機器。
有了上面的解釋執行緒池就好理解多了,有一堆任務需要開闢執行緒去執行,但是不能一下開闢那麼多執行緒,需要有個限額,所以執行緒池就來了。利用佇列,將需要執行的任務放到佇列裡面,然後再呼叫執行緒池從佇列裡面取任務執行。
怎麼去在佇列執行完去關閉執行緒呢。
這裡需要用到上下文管理
@contextlib.contextmanager
def _workerState(self, stateList, workerThread):
stateList.append(workerThread)
try:
yield
finally:
stateList.remove(workerThread)
下面呼叫self._workState的時候,用with進行管理。這樣再執行前會加入佇列,執行後悔移除佇列。
paramiko是第三方模組,比較強大,可以幫助我們很輕易的建立ssh連線。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# created by hansz
import select
import paramiko
import tty
import sys
user= "hansz"
passwd= "hansz"
# host_list =["192.168.17.137"]
port = 22
host = "192.168.17.137"
# 用的是不同的類。
# 第一種方式 直接建立SSHClient(),其實也是封裝了Transsport,只能用於執行命令
# ssh = paramiko.SSHClient()# 短暫連線,執行完就斷
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# ssh.connect(host, port, user, passwd)
# 第二種,Transport,執行命令用這種,上傳下載檔案也可以用這種。
transport = paramiko.Transport((host,22))
# transport.connect(username=user,password=passwd)
# 或者
transport.start_client()
transport.auth_password(user,passwd)
# 要執行命令的話可以給ssh._transport賦值。
# ssh = paramiko.SSHClient()
# ssh._transport = transport
# stdin,stdout,stderr = ssh.exec_command("ls")
# print stdout.read()
# 上傳下載檔案
# sftp = paramiko.SFTPClient.from_transport(transport)
# sftp.put("haha","aa")
# always connet
channel = transport.open_session()
channel.get_pty()
channel.invoke_shell()
import termios
import tty
oldtty = termios.tcgetattr(sys.stdin)
try:
tty.setraw(sys.stdin.fileno())
channel.settimeout(0.0)
while True:
readable, writeable, error = select.select([channel, sys.stdin, ],[],[],1)
# if it change ,select will catch this
if channel in readable:
try:
x = channel.recv(1024)
if len(x) == 0:
print "EOF"
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
if sys.stdin in readable:
# read should be 1
x = sys.stdin.read(1)
if len(x) == 0:
break
channel.send(x)
finally:
termios.tcsetattr(sys.stdin,termios.TCSADRAIN,oldtty)
transport.close()
相關推薦
python之路--paramiko實現簡單主機管理
執行緒池 首先怎麼理解執行緒池呢? 比如有十臺機器(執行緒池的大小),現在要加工一百件產品(要執行的任務)。 一件產品加工完之後(任務完成)機器(執行緒)開始加工下一件產品(新增任務到執行緒池)。 因為不能有100件產品需要加工就買100臺機器。也不能因
python--基於RabbitMQ rpc實現的主機管理
input == pub tag 3.4 num {} 配置 local 要求: 可以異步的執行多個命令對多臺機器>>:run "df -h" --hosts 192.168.3.55 10.4.3.4task id: 45334>>: check_
Python之路 - Socketserver實現多並發
one other while 進程 sockets ket 開發 port == Python之路 - Socketserver實現多並發 閱讀指引 ?? socketserver ?? 實現多並發 ?? 閱讀指引 ?? 在上面的整理篇章中 , 簡單的網絡編程
[python之路]簡單介紹
發展 開發 gui ipython 優缺點 開始 嵌入 網絡 線程 python介紹 #python是一個什麽樣的語言?編譯型和解釋型靜態語言和動態語言強類型定義語言和弱類型定義語言python是一門動態解釋性的強類型定義語言。 #Python的優缺點##優點Python的
Python學習之路:socket簡單實例
acc 學習 綁定 span spa bind local int code 客戶端 1 #客戶端 2 import socket 3 4 client = socket.socket()#相當於聲明socket類型,同時生成socket連接對象 5 cli
Python實踐之路4——實現進度條和文件內容參數替換
文件內容 imp 運行時 margin OS 效果 輸出結果 wait stdout 1、文件進度條 代碼需求: 實現可視化,不斷增加#####的功能。 代碼實現: 1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3
簡單學習Python之路1
打開文件 打開 數據 返回 文件 font 兩個 pri pytho 如何在cmd中打開文件:先用win+R打開cmd界面,在已知到你自己要打開文件的地址之後比如(F:\workspace),你先按F:,然後在用cd workspace進入workspace的文件中,然後在
Python之路(第三十一篇) 網路程式設計:簡單的tcp套接字通訊、粘包現象
一、簡單的tcp套接字通訊 套接字通訊的一般流程 服務端 server = socket() #建立伺服器套接字 server.bind() #把地址繫結到套接字,網路地址加埠 server.listen() #監聽連結 inf_loop:
毛毛Python進階之路2——實現雙端互聯
毛毛Python進階之路2——實現雙端互聯 1、兩個月前我開始自學Python 2、一個月前我在室友的壓迫下,我用Python優秀的第三方庫requests庫完成了相對正規的爬蟲專案。可以做到批量爬去網路上美眉的圖片【手動滑稽!!!】 連結:https://blog.csdn.ne
記錄Python學習之路----------------變數及簡單資料型別
在開頭先說明Python3在geany下關於中文註釋和中文程式碼,在開始一個Python程式時,在程式開頭輸入以下程式碼, #-*-coding:utf-8-*- #-*-coding:GBK-*- print("你好,Python!") 就像上圖程式碼所示。還要記住Py
小程式學習之路三:簡單功能實現
上一篇講解專案結構和開發工具的使用,本篇就開始進入正題了,在程式碼中實現簡單功能 新增一個控制元件view 修改控制元件view的樣式顯示 新增控制元件的點選事件 實現小程式的吐司功能 實現點選後頁面跳轉 雖然都是基礎,但是也能簡單入個門 一個個來,首先我添加了一
python之路--實現登入三次後鎖定功能
0x00 上次面試時問我是否在學python,我以前也接觸過,但是到了字典那兒怎麼也明白不了,然後不了了之,也從網上學過爬蟲,還是記得一丁點東西的,嘻嘻 最近在跟著老男孩學習python,Alex講師說過一句話,人總是高看自己。這點我是比較認同的,總是覺得自
python實現簡單學生管理系統
使用python實現了一個簡單的學生管理系統,包含註冊,登陸,修改密碼和簡單查詢資訊等簡單功能,後續感興趣可以自己新增上其他資訊或與已有的學生資訊表相關聯。註冊後存入資料庫對應表格中,並對密碼進行加密,表格比較簡單,只有id,姓名,密碼和is_delete四個欄位,程式碼使用
Python 新手實戰之機器學習實現簡單驗證碼識別(一):用PIL簡單繪製驗證碼
驗證碼生成 from PIL import Image, ImageDraw, ImageFont import random, os def draw(): #隨機生成背景顏色 (RGB顏色範圍為0-255,越高越接近白色),背景顏色不宜過深,
[Python之路] 記憶體管理&垃圾回收
一、python原始碼 1.準備原始碼 下載Python原始碼:https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz 解壓得到資料夾: 我們主要關注Include中的".h"檔案以及Objects目錄中的".c"檔案。 我們從Incl
Python之路54-JavaScript
python目錄一、如何編寫二、變量三、數據類型四、其他五、語句和異常六、函數JavaScript是一門編程語言,瀏覽器內置了JavaScript語言的解釋器,所以在瀏覽器上按照JavaScript語言的規則編寫相應的代碼,瀏覽器可以解釋並作出相應的處理。一、如何編寫1.JavaScript代碼存在形式(ty
Python之路-文件操作(py)
句柄 接口 編碼 操作 strong span 操作系統 使用 color 文件操作的基本步驟: 1.打開文件:f=open(‘filename‘),with open(‘filename‘) as f 2.操作文件:增,刪,改,查 3.關閉文件:f.close
python之路
正則 字符串格式化 socket編程 nice spa 進程 sock 第二篇 數據 python學習之路 學習目錄 番外篇:python簡介及安裝 第一篇:python基礎 第二篇:python基本數據類型 第三篇:字符串格式化及函數 第四篇:pyth
Python之路57-前端快速開發
python適用於全棧BootStrapcss、js學習BootStrap規則1.響應式@media<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&
Python之路58-Django安裝配置及一些基礎知識點
python目錄一、安裝Django二、創建工程三、創建app四、靜態文件五、模板路徑六、設置settings七、定義路由八、定義視圖九、渲染模板十、運行Django是一款Python的web框架一、安裝Djangopip3 install django安裝完成後C:\Python35\Script下面會生成