首页 > 代码库 > python学习第九天
python学习第九天
paramiko模块
ssh 密钥连接连接
import paramiko
private_key =pramiko.RSAKey.from_private_key_file("私钥路径")
ssh =paramiko.SShClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=",port=",username=",pkey=private_key)
#ssh.connect(hostname=",port=",username=",password=")
stdin,stdout,stderr =ssh.exec_command("")
result =stdout.read()
ssh.close(0
scp 密钥连接传输
import paramiko
private_key =pramiko.RSAKey.from_private_key_file("私钥路径")
transport =paramiko.Transport("","")
transport.connect(username="",pkey=private_file)
#transport.connect(username="",password="")
sftp =paramiko.SFTPClient.from_transport(transport)
sftp.put("原文件路径","目标文件路径")
sftp.get("目标文件路径","本地路径")
transport.close()
进程:程序调用资源的一个集合
线程:程序指令的集合
进程与线程的区别
主线程创建子线程,线程间相互独立
线程共享内存,进程内存独立
启动线程比进程快
线程可以直接通信,进程需要中间进程
线程可以操控其他线程,进程只能操控子进程
多线程
import threading
import time
def run(n):
print("task",n)
time.sleep(2)
t1 =threading.Thread(target=run,args=("t1",)) 并发执行
t1.start()
t2 =threading.Thread(target=run,args=("t2",))
t2.start()
# run("t1") 串行执行
# run("t2")
多线程的类方法实现
import threading
class MyThread(threading.Thread):
def __init__(self,n):
super(MyThread,self).__init__()
self.n =n
def run(self):
print("runint task",self.n)
t1 =MyThread("t1")
t2 =MyThread("t2")
t1.start()
t2.start()
同时启动多个并发任务并获取每个线程的执行完成
import threading,time
def run(n):
print("task",n)
time.sleep(2)
start_time =time.time()
t_obj =[]
for i in range(50):
t =threading.Thread(target=run,args=("t-%s"%i,))
#t.setDaemon(True)设置守护线程,等待非守护线程结束后该线程就结束
t.start()
t_obj.append(t)
for t in t_obj:
t.join() 等待相应线程的执行完成
print("cost",time.time()-start_time)
lock =threading.Lock() 实例化线程锁
lock =threading.RLock() 实例化递归锁
lock.acquire() 申请线程锁
lock.release() 释放线程锁
semaphore
=
threading.BoundedSemaphore(
5
)
#最多允许5个线程同时运行
semaphore.acquire()
semaphore.release()
队列
import queue
# q =queue.Queue() 先进先出队列
# q =queue.LifoQueue() 后进先出队列
q =queue.PriorityQueue(maxsize=3) 自由设置优先级队列
q.put((1,"alex")) 元组形式传递优先级和消息内容,第一个值越小优先级越高
q.put_nowait(2) 当队列放满时,直接返回
q.put(1) 放入消息内容
q.put(2)
q.get(block=False,timeout=1) 获取消息内容,block=false代表没有值时直接返回,timeout=1表示等待时间到1秒后就返回
q.get_nowait() 获取消息时,队列为空就返回
print(q.empty()) 检测队列是否为空
print(q.full()) 检测队列是否放满了
print(q.qsize()) 检测队列中消息的个数
生产者消费者模型
import threading,queue,time
q =queue.Queue(maxsize=10)
def product(name):
count = 1
while True:
q.put("骨头%d" ,count)
print("[%s]生产了骨头%d"%(name,count))
count +=1
time.sleep(2)
def consumer(name):
while True:
print("[%s]取了骨头[%s],并吃了它"%(name,q.get()))
time.sleep(1)
t =threading.Thread(target=product,args=("alex",))
t2 =threading.Thread(target=consumer,args=("jack",))
t3 =threading.Thread(target=consumer,args=("wangnima",))
t.start()
t2.start()
t3.start()
python学习第九天