本节内容
- 进程、与线程区别
- python GIL全局解释器锁
- 线程
- 语法
- join
- 线程锁之Lock\Rlock\信号量
- 将线程变为守护进程
- Event事件
- queue队列
- 生产者消费者模型
- Queue队列
- 开发一个线程池
- 进程
ssh
ssh_sftp
SSH密钥
RSH -非对称密钥验证
公钥:public key
私钥: privat key
10.0.0.31 ----链接----> 10.0.0.41
私钥 公钥
10.0.0.31 生成密钥对ssh-keygen
进程和线程
线程:(一堆指令)就是os操做系统去调度CPU操做运算的最小单位
进程:一堆资源的集合,不具有执行的属性,要操做CPU,先必须建立一个线程。--->一个进程最少包含一个线程(主线程)才能执行。。例如qq就是一个进程,
线程四、同一个进程的不一样线程之间能够相互交流;两个进程想交流了必须经过一个中间代理
五、一个线程能够控制和操做同一进程中的其余线程;可是进程只能操做子进程
存储速度: cpu>内存>文件
一个程序不能访问另外一个程序:程序就是一个进程,两个进程之间不可相互访问
eg. :
一次性启动50个线程,统一等最后的结果:
解:先建立一个临时列表,把全部的结果添加进去,而后循环列表
import threading
import time
#1、直接调用
start_time =time.time()
t_obj = []
def run(n):
print("hello",n)
time.sleep(2)
for i in range(50):
t= threading.Thread(target=run, args=("t-%s"%i,))
t.start()
t_obj.append(t)
for t in t_obj:
t.join()
print("t-%s has finished..."%i)
print("cost time : ",time.time()-start_time)
print("well done!!")
threading.current_thread() #查看进程类型
threading.active_count()#查看活动的线程
守护进程(守护线程):依赖与主线程存活,主进程执行完毕,全部的守护线程也跟着结束,程序退出。
gil锁
用户锁
递归锁rlock:多级锁防锁死
Semaphore(信号量)
import threading,time
def run(n):
semaphore.acquire()
time.sleep(1)
print("run the thread: %s" %n)
semaphore.release()
if __name__ == "__main__":
semaphore = threading.BoundedSemaphore(5) #最多同时容许5个线程同时运行
for i in range(20):
t =threading.Thread(target=run,args=(i,))
t.start()
while threading.active_count() !=1 :
pass
else:
print("--- all threads done ---")
优势:一、程序的解耦
二、提升效率