本节内容
- 进程、与线程区别
- 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就是一个进程,
线程4、同一个进程的不同线程之间可以相互交流;两个进程想交流了必须通过一个中间代理
5、一个线程可以控制和操作同一进程中的其他线程;但是进程只能操作子进程
存储速度: cpu>内存>文件
一个程序不能访问另一个程序:程序就是一个进程,两个进程之间不可相互访问
eg. :
一次性启动50个线程,统一等最后的结果:
解:先创建一个临时列表,把所有的结果添加进去,然后循环列表
import threading
import time
#一、直接调用
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 ---")
优点:1、程序的解耦
2、提高效率