Pool

如果要启动大量的子进程,可以用进程池的方式批量创建子进程:

from multiprocessing import Pool
import os, time, randomdef long_time_task(name):print('Run task %s (%s)...' % (name, os.getpid()))start = time.time()time.sleep(random.random() * 3)end = time.time()print('Task %s runs %0.2f seconds.' % (name, (end - start)))if __name__=='__main__':print('Parent process %s.' % os.getpid())p = Pool(4)for i in range(5):p.apply_async(long_time_task, args=(i,))print('Waiting for all subprocesses done...')p.close()p.join()print('All subprocesses done.')

执行结果如下:

Parent process 669.
Waiting for all subprocesses done...
Run task 0 (671)...
Run task 1 (672)...
Run task 2 (673)...
Run task 3 (674)...
Task 2 runs 0.14 seconds.
Run task 4 (673)...
Task 1 runs 0.27 seconds.
Task 3 runs 0.86 seconds.
Task 0 runs 1.41 seconds.
Task 4 runs 1.91 seconds.
All subprocesses done.

代码解读:

Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。

请注意输出的结果,task 0123是立刻执行的,而task 4要等待前面某个task完成后才执行,这是因为Pool的默认大小在我的电脑上是4,因此,最多同时执行4个进程。这是Pool有意设计的限制,并不是操作系统的限制。如果改成:

p = Pool(5)

就可以同时跑5个进程。

由于Pool的默认大小是CPU的核数,如果你不幸拥有8核CPU,你要提交至少9个子进程才能看到上面的等待效果。

原文摘自:

https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064

作者:

liaoxuefeng

Python多进程之Pool相关推荐

  1. Python多进程之Manager

    from multiprocessing import Process,Manager import os # 这里实现的就是多个进程之间共享内存,并修改数据 # 这里不需要加锁,因为manager已 ...

  2. python 多线程编程之_thread模块

    python 多线程编程之_thread模块 参考书籍:python核心编程 _thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁.简单锁 ...

  3. python语言if语句-Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...

  4. python 16进制转10进制, 8进制转10进制, 2进制转10进制的方法

    python 16进制转10 进制, 8进制转10进制, 2进制转10进制 可以使用系统自带的 int 方法 具体如下: value = "0x1388" result = int ...

  5. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

  6. anaconda的python使用教程-Python安装教程之Anaconda入门使用总结

    原标题:Python安装教程之Anaconda入门使用总结 如今参加Python培训学习Python开发的小伙伴对Python安装教程比较感兴趣,本篇文章小编就和读者们分享一下Python安装教程之A ...

  7. Python 进程池 multiprocessing.Pool - Python零基础入门教程

    目录 一.Python 进程池 multiprocessing.Pool 介绍 二.Python 进程池 multiprocessing.Pool 使用 三.猜你喜欢 零基础 Python 学习路线推 ...

  8. python常用进制转换の方法

    python常用进制转换の方法 (正整数)任意进制转十进制 1.int()函数 ''' 描述 int() 函数用于将一个字符串或数字转换为整型. 语法 class int(x, base=10) 参数 ...

  9. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...

    原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...

  10. 什么是python基础教程-python基础教程之python是什么?概念解析

    Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CP ...

最新文章

  1. 05-自己创建mapmodel自定义迁移方式
  2. docker启动远程管理接口
  3. iOS进阶之架构设计MVVM的理解(3)
  4. Error: XML: Cacti version does not exist.
  5. Apache Storm 官方文档 —— 源码组织结构
  6. STM32F7xx —— 内部flash
  7. 校园招聘 - 比较容易的面试题
  8. pmp中ram和raci的区别_【PMP知识点总结】采购流程、采购合同的类型、采购合同的条款...
  9. 百度2017春招笔试
  10. Flask报错RuntimeError: No application found. Either work inside a view function or push an applicatiio
  11. P2463 [SDOI2008]Sandy的卡片
  12. MyEclipse出现红色感叹号解决办法
  13. mysql授权replication_MySQL创建用户并授权REPLICATION CLIENT和REPLICATION SLAVE
  14. C语言键盘控制走迷宫小游戏
  15. 硬件钱包 Ledger使用教程
  16. 这款小巧精致的 Keychron K7 满足了我对键盘的所有想象
  17. LaTex 的图片插入
  18. mysql b tree索引原理_B+Tree原理及mysql的索引分析
  19. PHP输出一段励志的话,100句关于励志的话,青春励志的话,写得好的励志句子
  20. 实验3 手写字体识别【机器学习】

热门文章

  1. string.Empty与,null的区别
  2. 开始学习编写用于 Windows SideShow 设备的小工具【转】
  3. 依赖注入的两种常用方式(构造器和Setter)与注入内容(装配数据)——Spring IOC/DI(三)
  4. 自定义TextView显示指定行数
  5. [2018.04.29 T1] 图
  6. nginx做下载文件服务器
  7. docker tensorflow_Docker环境下如何使用TensorBoard
  8. springboot 初始化一个常量map_C++ 惯用法: const 常量和字面量
  9. 计算机组装与维护文化建设,计算机组装与维护能力标准实训教程
  10. cisco 交换机 获取 转发表_看完这份1113页的TCP/IP协议+路由与交换机,成功上岸字节跳动...