Python成长笔记 - 基础篇 (十)

时间:2021-10-06 12:58:18
本节内容
  1. 进程、与线程区别
  2. python GIL全局解释器锁
  3. 线程
    1. 语法
    2. join
    3. 线程锁之Lock\Rlock\信号量
    4. 将线程变为守护进程
    5. Event事件 
    6. queue队列
    7. 生产者消费者模型
    8. Queue队列
    9. 开发一个线程池
    1. 进程
      1. 语法
      2. 进程间通讯
      3. 进程池    
      ssh
      Python成长笔记 - 基础篇 (十)
      ssh_sftp
      Python成长笔记 - 基础篇 (十)
      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、提高效率