一. 课程安排

  • 课程内容
    • 进程介绍
    • 线程和进程之间的对比
    • 进程之间的通信
    • 进程池之间的通信

二. 课堂笔记

1. 进程介绍

进程:正在执行的程序

程序:没有执行的代码,是一个静态的
1582607152118-3d8ba3f6-36a9-4455-9923-da5595a80335.png

2. 线程和进程之间的对比

进程:能够完成多任务,一台电脑上可以同时运行多个QQ

线程:能够完成多任务,一个QQ中的多个聊天窗口

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

1582607178213-c9a696f5-3787-4366-ac59-446233c12d29.png

3. 进程之间的通信

  • Queue-队列 先进先出
  • 共享全局变量不适用于多进程编程

4. 进程池之间的通信

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程,但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法

  1. from multiprocessing import Pool
  2. import os,time,random
  3. def worker(msg):
  4. t_start = time.time()
  5. print('%s开始执行,进程号为%d'%(msg,os.getpid()))
  6. time.sleep(random.random()*2)
  7. t_stop = time.time()
  8. print(msg,"执行完成,耗时%0.2f"%(t_stop-t_start))
  9. if __name__ == '__main__':
  10. po = Pool(3) # 定义一个进程池
  11. for i in range(0,10):
  12. po.apply_async(worker,(i,))
  13. print("--start--")
  14. po.close()
  15. po.join()
  16. print("--end--")