进程和程序

进程:正在执行的程序

程序:没有执行的代码,是一个静态的

进程的状态

9d8cf84d557c60bb1ac6e92cd8635725_764x309.png

使用进程实现多任务

multiprocessing模块就是跨平台的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。

线程和进程之间的对比

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

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

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

879ddd858903b96071f52f7b02970cda_1395x535.png

进程间通信-Queue

Queue-队列 先进先出

队列间简单通信

模拟下载数据,与数据处理

多进程共享全局变量

共享全局变量不适用于多进程编程

进程池

当需要创建的子进程数量不多时,可以直接利用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. def demo():
  10. pass
  11. if __name__ == '__main__':
  12. po = Pool(3) # 定义一个进程池
  13. for i in range(0,10):
  14. po.apply_async(worker,(i,))
  15. print("--start--")
  16. po.close()
  17. po.join()
  18. print("--end--")

进程池间的进程通信

多任务文件夹复制

1 获取用户要copy的文件夹的名次

2 创建一个新的文件夹

3 获取文件夹的所有的待copy的文件名字

4 创建进程池

5 向进程池中添加拷贝任务