python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
本文简单介绍python进程模块multiprocessing提供的进程池和线程池功能。
进程池:
# -*- coding: utf-8 -*- import multiprocessing import timedef func(msg):print('msg: ', msg)time.sleep(1)print('********')return 'func_return: %s' % msgif __name__ == '__main__':# apply_async print('\n--------apply_async------------')pool = multiprocessing.Pool(processes=4)results = []for i in range(10):msg = 'hello world %d' % iresult = pool.apply_async(func, (msg, ))results.append(result)print('apply_async: 不堵塞')for i in results:i.wait() # 等待进程函数执行完毕 for i in results:if i.ready(): # 进程函数是否已经启动了 if i.successful(): # 进程函数是否执行成功 print(i.get()) # 进程函数返回值 # apply print('\n--------apply------------')pool = multiprocessing.Pool(processes=4)results = []for i in range(10):msg = 'hello world %d' % iresult = pool.apply(func, (msg,))results.append(result)print('apply: 堵塞') # 执行完func才执行该句 pool.close()pool.join() # join语句要放在close之后 print(results)# map print('\n--------map------------')args = [1, 2, 4, 5, 7, 8]pool = multiprocessing.Pool(processes=5)return_data = pool.map(func, args)print('堵塞') # 执行完func才执行该句 pool.close()pool.join() # join语句要放在close之后 print(return_data)# map_async print('\n--------map_async------------')pool = multiprocessing.Pool(processes=5)result = pool.map_async(func, args)print('ready: ', result.ready())print('不堵塞')result.wait() # 等待所有进程函数执行完毕 if result.ready(): # 进程函数是否已经启动了 if result.successful(): # 进程函数是否执行成功 print(result.get()) # 进程函数返回值
线程池:
# -*- coding: utf-8 -*- from multiprocessing.dummy import Pool as ThreadPool import timedef fun(msg):print('msg: ', msg)time.sleep(1)print('********')return 'fun_return %s' % msg# map_async print('\n------map_async-------') arg = [1, 2, 10, 11, 18] async_pool = ThreadPool(processes=4) result = async_pool.map_async(fun, arg) print(result.ready()) # 线程函数是否已经启动了 print('map_async: 不堵塞') result.wait() # 等待所有线程函数执行完毕 print('after wait') if result.ready(): # 线程函数是否已经启动了 if result.successful(): # 线程函数是否执行成功 print(result.get()) # 线程函数返回值 # map print('\n------map-------') arg = [3, 5, 11, 19, 12] pool = ThreadPool(processes=3) return_list = pool.map(fun, arg) print('map: 堵塞') pool.close() pool.join() print(return_list)# apply_async print('\n------apply_async-------') async_pool = ThreadPool(processes=4) results =[] for i in range(5):msg = 'msg: %d' % iresult = async_pool.apply_async(fun, (msg, ))results.append(result)print('apply_async: 不堵塞') # async_pool.close() # async_pool.join() for i in results:i.wait() # 等待线程函数执行完毕 for i in results:if i.ready(): # 线程函数是否已经启动了 if i.successful(): # 线程函数是否执行成功 print(i.get()) # 线程函数返回值 # apply print('\n------apply-------') pool = ThreadPool(processes=4) results =[] for i in range(5):msg = 'msg: %d' % iresult = pool.apply(fun, (msg, ))results.append(result)print('apply: 堵塞') print(results)
python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例相关推荐
- 在Python网络爬虫程序中使用线程池
在Python网络爬虫程序中使用线程池 一.为什么需要使用线程池 二.线程池的使用 2.1 线程池的类与方法 2.2 使用线程池的一般步骤 三.在爬虫程序中使用线程池的实例 一.为什么需要使用线程池 ...
- python 线程池回收_python实现线程池
这段时间一直在做一个爬虫系统,用python和django实现.其中涉及到了多线程的问题,在后端使用一个全局的字典用来保存和识别已经运行的线程.但是觉得这样的实现不是不太舒服.于是想找到一个更好的实现 ...
- springboot 线程池_Spring boot 2 线程池怎么配置
线程池 在java 中线程池,就是ThreadPoolExecutor来构造,简单看下线程池包含的方法, corePoolSize:初始化线程.线程池中保留的线程数量. maximumPoolSize ...
- 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
文章目录 一.自定义线程池使用流程 二.自定义任务拒绝处理策略 三.完整代码示例 在博客 [Android 异步操作]线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTas ...
- 【Android 异步操作】线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTask 使用线程池示例 )
文章目录 一.线程池简介 二.线程池初始化方法简介 三.线程池使用示例 一.线程池简介 线程池一般是实现了 ExecutorService 接口的类 , 一般使用 ThreadPoolExecutor ...
- java线程池_Java 并发编程 线程池源码实战
作者 | 马启航 杏仁后端工程师.「我头发还多,你们呢?」 一.概述 笔者在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写 ...
- java 队列线程池_JAVA工作队列与线程池
为什么要使用线程池? 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协议 ...
- 什么是线程池和常用的线程池
创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池, ...
- 一文详解java线程池 详解Java线程池的七个参数 详解池化技术 java如何选择核心线程数 详解Java线程池的拒绝策略
目录 引言 线程池使用场景 加快请求响应(响应时间优先) 加快处理大任务(吞吐量优先) 特殊说明 线程池的池化技术 线程池的创建 手动创建 创建newFixedThreadPool线程池 创建newS ...
- Android性能优化之线程池策略和对线程池的了解
转载于 http://blog.csdn.net/roshen_android/article/details/52948480 线程的运行机制 1. 开启线程过多,会消耗cpu 2. 单核cpu,同 ...
最新文章
- 七夕福利 | 拒绝狗粮,给你全部的AI(爱)
- 开源sip客户端 linux,开源SIP服务器 Kamailio
- 1,windows java环境搭建,eclipse安装、tomcat配置,快速创建jsp页面
- mysql字段作用_mysql用户表host字段作用
- 用java写一个if语句
- jenkins使用插件OWASP Dependency-Check Plugin对jar包漏洞扫描
- apache部署mo_python
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 	Postgre	Mysql	 整数	intgreter	Int	 小数	numeric	FL
- Spring源码深度解析百度网盘下载
- INT 10H显示字符串的小例子
- CSS3的clac()函数无效,警告提示“invalid property value”
- ERP电商管理系统开发实现功能
- javascript中ready和onload的理解
- raspios-bullseye-arm64 系统 BUG
- 那些年我们遇到的坑(3)-basePackages和scanBasePackages
- 云时代下,传统和新型存储的博弈已经开始
- 2015湘潭邀请赛 Yada Number
- 魔法女孩交到了好朋友(变量)
- 常用搜索引擎 (转)
- 实际开发中,TCP / IP五层网络模型是如何工作的?
热门文章
- stemwin 实现显示屏幕滑动
- 装了oracle 开机卡黑屏,开机黑屏进不了系统,手把手教你解决电脑开机黑屏进不了系统...
- 查看表空间使用率(包括临时表空间)
- 区块链热点!STO被政府严令禁止
- hdu5148 树形dp,分组背包
- Java中的请求域(Request)《笔记》
- 数据结构(C语言)——线性表(定义,基本操作)
- Ubuntu 20.04 日常软件及开发环境安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法(待整理!!!)
- Matlab:绘制不同颜色的柱状图bar
- STM32基础之中断--外部中断