Python高级09 -进程

内容

1. 多进程共享全局变量

在这里插入图片描述

2. 进程间的通信

在这里插入图片描述

这个时候就可以使用到队列进行通信。

  • 普通队列与进程队列
    普通队列
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

进程队列
在这里插入图片描述

  • 需求
    实现在函数 download 中,将list元素保存到队列中
    实现在函数 manage_data 中,将list元素从队列中取出,并且添加到新的列表中。

在这里插入图片描述
在这里插入图片描述

  • 注意:如果使用普通队列,不是使用 start() 方法,而是 run() 方法。
    在这里插入图片描述
    在这里插入图片描述
  • start() 与 run() 区别
    start() 方法来启动进程,真正实现了多进程运行,这时无需等待 run 方法体代码执行完毕而直接继续执行下面的代码:调用 Process 类的 start() 方法来启动一个进程,这时此进程处于就绪(可运行)状态,并没有运行,一旦得到 cpu 时间片,就开始执行 run() 方法,这里方法 run() 称为进程体,当进程结束后,不可以重新启动。
    run() 方法只是类的一个普通方法,如果直接调用 run 方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待 run 方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
    在这里插入图片描述
    在这里插入图片描述
    run()
    在这里插入图片描述

3. 进程池

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

在这里插入图片描述

初始化 Pool 时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求,但是如果进程池中的进程已经达到指定的最大值,那么该请求 就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务。

如下代码,使用进程池体现。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 进程池通信

使用进程池通信时,要使用进程池的队列

  • multiprocessing.Manager().Queue()
    在这里插入图片描述
    在这里插入图片描述

5. 多任务文件夹复制

需求1:实现多任务文件夹复制
获取用户要复制的文件夹名字
创建一个新的文件夹
获取文件夹所有待拷贝的文件名字
创建进程池
添加拷贝任务

需求2:实现进度条

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值