首页 > 代码库 > 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学习第九天