python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
进程池:
# -*- coding: utf-8 -*- import multiprocessing
import time def func(msg):
print('msg: ', msg)
time.sleep(1)
print('********')
return 'func_return: %s' % msg if __name__ == '__main__':
# apply_async
print('\n--------apply_async------------')
pool = multiprocessing.Pool(processes=4)
results = []
for i in range(10):
msg = 'hello world %d' % i
result = 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' % i
result = 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 time def 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' % i
result = 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' % i
result = pool.apply(fun, (msg, ))
results.append(result) print('apply: 堵塞')
print(results)
计算多的用多进程
io多的用多线程
python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例的更多相关文章
- python第十一天-----补:线程池
低版本: #!/usr/bin/env python import threading import time import queue class TreadPool: ""&q ...
- python(13)多线程:线程池,threading
python 多进程:多进程 先上代码: pool = threadpool.ThreadPool(10) #建立线程池,控制线程数量为10 reqs = threadpool.makeRequest ...
- java多线程系类:JUC线程池:03之线程池原理(二)(转)
概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...
- java多线程系类:JUC线程池:01之线程池架构
概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容--线程池.内容包括:线程池架构 ...
- (转)WebSphere 中池资源调优 - 线程池、连接池和 ORB
WebSphere 中池资源调优 - 线程池.连接池和 ORB 来自:https://www.ibm.com/developerworks/cn/websphere/library/techartic ...
- 线程池;java的线程池的实现原理;适用于频繁互动(如电商网站)
线程池是一种多线程处理形式,处理过程中将任务加入到队列,然后在创建线程后自己主动启动这些任务.线程池线程都是后台线程.每一个线程都使用默认的堆栈大小,以默认的优先级执行.并处于多线程单元中. 假设某个 ...
- java多线程系类:JUC线程池:02之线程池原理(一)
在上一章"Java多线程系列--"JUC线程池"01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我 ...
- java多线程、线程池及Spring配置线程池详解
1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源.2.java中简单的实现多线程的方式 继承Thread ...
- juc线程池原理(四): 线程池状态介绍
<Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态 ...
- 你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池
你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池. 否则,如果只用一个线程池的话,不管是iO密集的线程,或者cpu消耗大的都放在同一个线程池的话,会发生线程池被撑满的情况
随机推荐
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现Timer计时功能
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...
- 斐波那契数列 (C#)
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...
- [PHP] 魔术方法__get __set __sleep __wakeup的实际使用
1.__get __set是在给不可访问属性赋值和读取时,调用 2.__sleep 是在序列化对象的时候调用 3.__wakeup是在反序列化对象的时候调用 4.可以在序列化对象的时候 , 只序列化指 ...
- Java开发笔记(七十三)常见的程序异常
一个程序开发出来之后,无论是用户还是程序员,都希望它稳定地运行,然而程序毕竟是人写的,人无完人哪能不犯点错误呢?就算事先考虑得天衣无缝,揣着一笔巨款跑去岛国买了栋抗震性能良好的海边别墅,谁料人算不如天 ...
- 看Android Stuido教程有感
毕业两年了,之前一直都在另外的博客里写之前大学的经历,以及转载一些学习Android的点滴,原创的并不多.因为现在更多的是在博客园里逛,所以直到上个月还是鼓起勇气开通了博客,算来到今天也有一段时间了, ...
- Django学习之四:Django Model模块
目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...
- 前端项目git操作命名规范和协作开发流程
前言 一个项目的分支,一般包括主干 master 和 开发分支 dev,以及若干临时分支 分支命名规范 分支: 命名: 说明: 主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分 ...
- Visual Studio 无法记忆标签页、断点等的解决办法
1.到工程目录删除*.suo文件 2.*.suo默认是隐藏的,需要打开查看隐藏文件的开关
- ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...
- SQLServer的三种Recovery Model
SQL Server恢复模式的三种类型的比较 此文章主要向大家讲述的是SQL Server恢复模式,我们主要介绍的是三种恢复模式,其中包括简单SQL Server数据库的恢复模式.完整恢复模式与大容量 ...