concurrent.futures:是关于进程池 和 线程池 的

官方文档

https://docs.python.org/dev/library/concurrent.futures.html

现讲进程池把,看文档你会发现,两种池的用法几乎是一样的

一段代码来了:

from concurrent.futures import ProcessPoolExecutor
impor time,os
def work(n):
print('%s is running'% os.getpid())
print('%s is end'% os.getpid())
return n**
if __name__ == '__main__':
p = ProcessPoolExecutor() # 默认是CPU的个数
start = time.time()
l = []
for i in range():
obj = p.submit(work,i)
l.append(obj)
p.shutdown()
print([obj.result() for obj in l])
print(time.time()-start)

欧克!在上面的代码中 有几个关键的方法和类。

ProcessPoolExecutor :看类的名字,进程池, 创建进程池的,需要注意的是ProcessPoolExecutor()括号内默认的是本机的CPU个数。
p.submit 类似与Pool的apply_async方法,给进程传值,submit(函数名,函数的参数)
obj.result() 看看这个接口的名字,多好领会,得到结果的, 这个result()上面的方法submit()得到的结果是一个对象,想要得到实际的值,obj.result()就得得到值了,
  是不是很简单 p.shutdown() 这个shutdown是用来等的,谁等呢,在哪里写的就是谁等,等上面的子进程运行完,在运行下面的。 还有一个map方法 ,我们再来看段代码。
from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
import time,os
from threading import currentThread
def work(n):
print('%s is running'% currentThread().name)
time.sleep(2)
print('%s is end'% currentThread().name)
return n**2
if __name__ == '__main__':
p = ThreadPoolExecutor() # 默认的CPU的个数*5
obj = p.map(work,range(10)) # 迭代器
p.shutdown()
print(list(obj))

map方法

得到的是一个对象  obj=map(函数名,可迭代的对象)

就这么简单,跟之前的内置函数一样。

线程池中唯一不同的就是:

p = ThreadPoolExecutor() # 默认的CPU的个数*5
 
												

基于concurrent.futures的进程池 和线程池的更多相关文章

  1. concurrent.futures模块简单介绍(线程池,进程池)

    一.基类Executor Executor类是ThreadPoolExecutor 和ProcessPoolExecutor 的基类.它为我们提供了如下方法: submit(fn, *args, ** ...

  2. 进程池与线程池基本使用、协程理论与实操、IO模型、前端、BS架构、HTTP协议与HTML前戏

    昨日内容回顾 GIL全局解释器锁 1.在python解释器中 才有GIL的存在(只与解释器有关) 2.GIL本质上其实也是一把互斥锁(并发变串行 牺牲效率保证安全) 3.GIL的存在 是由于Cpyth ...

  3. concurrent.futures模块(进程池/线程池)

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

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

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

  5. 创建进程池与线程池concurrent.futures模块的使用

    一.进程池. 当并发的任务数量远远大于计算机所能承受的范围,即无法一次性开启过多的任务数量就应该考虑去 限制进程数或线程数,从而保证服务器不会因超载而瘫痪.这时候就出现了进程池和线程池. 二.conc ...

  6. python系列之 - 并发编程(进程池,线程池,协程)

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

  7. 第三十八天 GIL 进程池与线程池

    今日内容: 1.GIL 全局解释器锁 2.Cpython解释器并发效率验证 3.线程互斥锁和GIL对比 4.进程池与线程池 一.全局解释器锁 1.GIL:全局解释器锁 GIL本质就是一把互斥锁,是夹在 ...

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

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

  9. GIL锁、进程池与线程池

    1.什么是GIL? 官方解释: ''' In CPython, the global interpreter lock, or GIL, is a mutex that prevents multip ...

随机推荐

  1. 自制rpm包

    参考自:https://blog.csdn.net/u010384744/article/details/80929319 https://blog.csdn.net/samxx8/article/d ...

  2. Linux中find命令的用法汇总

    Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm

  3. MGR架构~ 整体性能架构的调优

    一 简介:MGR集群架构的调优二 过程:本文将从各个角度来具体阐述下三 硬件    1 硬件选择相同配置的服务器,磁盘,内存,cpu性能越高越好四 网络    1 0丢包和最好万兆网卡五 MGR本身  ...

  4. okhttp3与旧版本okhttp的区别分析

    https://www.jianshu.com/p/4a8c94b239b4  待总结学习

  5. 在Linux环境下安装Python3

    参考链接:https://blog.csdn.net/zhangdongren/article/details/82685932

  6. 20165234 《Java程序设计》第一周学习总结

    第一周学习总结 教材学习内容总结 java的特点 语法简单,面向对象,稳定,与平台无关,多线程,动态. 平台是由操作系统和处理器(CPU)所构成,每个平台都会形成自己独特的机器指令,相同的CPU和不同 ...

  7. Zookeeper学习笔记4

    开源客户端 ZkClient <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId ...

  8. Palindrome Number & Reverse Integer

    Determine whether an integer is a palindrome. Do this without extra space. 分析:把一个数倒过来,然后看两个数是否相同. pu ...

  9. 高并发的socket的高性能设计【转】

    转自:https://blog.csdn.net/quincyfang/article/details/44654351 高性能数据传输系统的框架设计 1 引言 随着互联网和物联网的高速发展,使用网络 ...

  10. 记录一段QQ关于 UNIGUI 的Session 时间设定

    记录一段QQ关于 UNIGUI 的Session 时间设定,来自[台中]cmj(31365722):  [重點說明] 1.UniGUI的Session就是UniMainModule.   2.Sess ...