Python-Day9 Paramiko模块/进程/线程/RabbitMQ队列

一、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 )
时间: 2024-11-05 18:42:25

Python-Day9 Paramiko模块/进程/线程/RabbitMQ队列的相关文章

Python之paramiko模块和SQL连接API

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con

使用python的Paramiko模块登陆SSH

paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块可以方便的实现ssh登录,并执行命令. 1. paramiko模块安装 1.1安装pycrypto库 下载地址请戳这里:http://download.csdn.net/detail/oatnehc/8825715: pycrypto库的主页在这里:https://www.dlitz.net/software/pycrypto/ pycrypto库

Python中paramiko模块在linux运维中应用

python的paramiko模块可以实现ssh客户端的功能,使用起来也比较简单.但是当服务器非常多的时候,每台服务器上执行完全相同的简单操作,也会花费大量的时间. 下载模块:paramiko.tar.gz使用tar解压后在cd到目录下最后使用rpm安装 rpm -ivh * import paramiko //导入paramiko模块host='192.168.x.xx' //需要远程管理的主机ip ssh=paramiko.SSHClient() //相当于点开xshellssh.set_m

进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型

一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: 1 import paramiko 2 # 创建SSH对象 3 ssh = paramiko.SSHClient() 4 5 # 允许连接不在know_hosts文件中的主机 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 7 # 连接服务器 8 ss

paramiko模块,线程,进程

关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用paramiko模块写一个简单的远程ssh运行命令,代码如下: 1 import paramiko 2 ssh = paramiko.SSHClient() 3 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 4 ssh.connect("19

python之paramiko模块

python paramiko模块 1.安装 1225 ./configure #在解压后的python2.7.9的目录下 1226 make 1227 make install 1228 cd /usr/local/ 1229 ls 1230 cd bin 1231 ls 1232 ./python 1233 python 1234 cd /usr/bin 1235 ls 1236 ll python* 1237 mv ./python ./python26 1238 ln -s /usr/l

python的paramiko模块

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台.利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输. paramiko常用的类与方法: 1.SSHClient类 SHClient类是SSH服务会话的高级表示,封装了传输.通道以及SFTPClient的校验.建立方法,通常用于

python的paramiko模块报错解决办法

写了一个Python脚本内容如下: #-*- coding:utf-8 -*- __author__ = 'kai' import paramiko import sys,os host = sys.argv[1] user = 'zk' password = '123' cmd = sys.argv[2] s = paramiko.SSHClient()        #绑定实例 s.load_system_host_keys()       #加载本机HOST主机文件 s.set_missi

Python 之paramiko 模块

一. 简介 paramiko 是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClient,即一个远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作 二. 使用 1. 下载安装 #安装pipwget --no-check-certificate https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447