1.通过multiprocessing.Process()类创建子进程

  1. import multiprocessing, time, os, random
  2.  
  3. def work(index):
  4. """
  5. 任务
  6. :param index:任务索引号
  7. """
  8. start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起
  9. # random.random() :random() -> x in the interval [0, 1)
  10. time.sleep(random.random())
  11. stop_time = time.time()
  12. print("任务%d 执行时间%.2f 当前进程id = %d 当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid()))
  13.  
  14. if __name__ == '__main__':
  15. print("main - 当前进程id = %d" % os.getpid())
  16. # 创建子进程方式1 通过multiprocessing.Process()类创建
  17. for i in range(10):
  18. p = multiprocessing.Process(target=work, args=(i,))
  19. p.start()

结果如下: 可以看出完成10个任务创建了10个子进程,且这些子进程由主进程创建

2.使用进程池创建子进程

  1. """
  2. 进程池
  3. 1. multiprocessing.Pool()
  4. 2. apply_async(func[,args[,kwds]])
  5. 申请异步执行任务
  6. - func:指向子进程要执行的函数
  7. - args:向func指向的函数传递可变参数
  8. - kwargs:向func指向的函数传递关键字参数
  9. 3. close() : 关闭进程池, 不再接收新的任务请求
  10. 4. terminate() :终止进程池中的子进程的任务执行
  11. 5. join(): 阻塞主进程,直到进程池中的所有子进程执行完毕,再解阻塞,必须在close或terminate之后使用;
  12. """
  13. import multiprocessing, time, os, random
  14.  
  15. def work(index):
  16. """
  17. 任务
  18. :param index:任务索引号
  19. """
  20. start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起
  21. # random.random() :random() -> x in the interval [0, 1)
  22. time.sleep(random.random())
  23. stop_time = time.time()
  24. print("任务%d 执行时间%.2f 当前进程id = %d 当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid()))
  25.  
  26. if __name__ == '__main__':
  27. print("main - 当前进程id = %d" % os.getpid())
  28. # 创建进程池
  29. """通过进程池来创建子进程,再执行任务
  30. processes=3: 设置进程池最大值(拥有进程最大数量)
  31. 缺省值: os.cpu_count() or 1 , 即cpu的数量作为进程池的最大值
  32. """
  33. pool = multiprocessing.Pool(3)
  34. for i in range(10):
  35. pool.apply_async(func=work, args=(i,))

结果如下: 可以看出,完成10个任务,总共还是3个子进程,且这3个子进程也是有主进程创建

如果你和我有共同爱好,我们可以加个好友一起交流!

python编程系列---进程池的优越性体验的更多相关文章

  1. python中的进程池

    1.进程池的概念 python中,进程池内部会维护一个进程序列.当需要时,程序会去进程池中获取一个进程. 如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止. 2.进程池 ...

  2. python中的进程池:multiprocessing.Pool()

    python中的进程池: 我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池 进程池帮助我们创建进程完成任务,不需要我们管理.进程池:利用multiprocessing 下的Pool ...

  3. Python中的进程池与线程池(包含代码)

    Python中的进程池与线程池 引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用su ...

  4. python并发编程之进程池,线程池,协程

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  5. python并发编程之进程池,线程池concurrent.futures

    进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多, 这会对 ...

  6. Python并发编程之进程池与线程池

    一.进程池与线程池 python标准模块concurrent.futures(并发未来) 1.concurrent.futures模块是用来创建并行的任务,提供了更高级别的接口,为了异步执行调用 2. ...

  7. python并发编程之进程池、线程池、协程

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  8. Python网络编程(进程池、进程间的通信)

    线程池的原理:        线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,        创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,        即均为启动,不消 ...

  9. python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)

    9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型 池子内什么时候装线程:并发的任务属于I ...

随机推荐

  1. Uva 232 一个换行WA 了四次

    由于UVA OJ上没有Wrong anwser,搞的多花了好长时间去测试程序,之前一直以为改OJ有WA,后来网上一搜才知道没有WA,哎哎浪费了好长时间.此博客用来记录自己的粗心大意. 链接地址:htt ...

  2. 基于python-django框架的支付宝支付案例

    目录 @ 一. 开发前的准备 1. 必须了解的知识 SDK:软件开发工具包,可以为开发者提供快速开发的工具 沙箱环境:也就是测试环境 支付宝支付金额的精度:小数点后两位(面试) 支付宝用的什么加密方式 ...

  3. [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)

    开发环境 Vs2019 16.3.1 dotnetcore 3.0 一.开始 新建webapp项目 dotnet new webapp -o projectname 或Vs 中新建项目选择 Web应用 ...

  4. 23种设计模式之模板方法(Template Pattern)

    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 AbstractClass:抽象类.用来定义算法骨架和原语操作,在这个类里 ...

  5. [Next] 初见next.js

    next 简介 Next.js 是一个轻量级的 React 服务端渲染应用框架 next 特点 默认情况下由服务器呈现 自动代码拆分可加快页面加载速度 简单的客户端路由(基于页面) 基于 Webpac ...

  6. springboot + thymeleaf静态资源访问404

    在使用springboot 和thtmeleaf开发时引用静态资源404,静态资源结如下: index.html文件: <!DOCTYPE html> <html xmlns:th= ...

  7. Kubernetes 系列(七):持久化存储StorageClass

    前面的课程中我们学习了 PV 和 PVC 的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的 ...

  8. eShopOnContainers学习系列(二):数据库连接健康检查

    项目里使用数据库的时候,我们有时候需要知道数据库当前的健康状态,特别是当数据库连接不上的时候能够立马获悉.eShopOnContainers里存在着大量的服务健康.连接健康的检查,数据库连接是其中之一 ...

  9. passwd、shadow、group文件格式

    [root@bogon ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash 登录名:密码占位符:UID:GID:注释:家目录:用户的默认shell ...

  10. 【SQL】 收入支出求盈亏

    求项目ID为1000的盈亏 表名为:T 字段:ID    P_ID   AMOUNT   TYPE(1:收入 2:支出) '