7.18python进程池
主要方法 常用的就是 from multiprocessing import Pool
map() 同步
apply() 同步
apply_async() 异步 手动 close() join() 学的逐渐的由浅入深
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/18 16:44
# !@Author TrueNewBee # 为什么会有进程池的概念
# 效率
# 每开启进程,开启属于这个进程的内存空间
# 寄存器 堆栈 文件
# 进程过多 操作系统的调度 # 进程池
# python中的 先创建一个属于进程的池子
# 这个池子指定能放多少个进程
# 先将这些进程创建好 # 更高级的进程池
# 可以根据用户需求改变进程数量
# 自带join方法,里面是异步
# map(func,range) 里面传入的参数只能传入可迭代的 range ,列表,字典等
import time
from multiprocessing import Pool, Process def func(n):
for a in range(10):
print(n+1) if __name__ == '__main__':
start = time.time()
pool = Pool(5) # 5个进程
pool.map(func, range(100)) # 100个任务 异步
t1 = time.time() - start
p_list = []
for i in range(100):
p = Process(target=func, args=(i, ))
p_list.append(p)
p.start()
for i in p_list:p.join()
t2 = time.time()-start
print(t1, t2)
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/18 20:29
# !@Author TrueNewBee # apply() 方法为同步的
# apply_async() 方法为异步的 一般都是用这个
import time
import os
from multiprocessing import Pool def func(n):
print('start func%s' % n, os.getpid())
time.sleep(1)
print('end func%s' % n, os.getpid()) if __name__ == '__main__':
p = Pool(5)
for i in range(10):
# p.apply(func, args=(i, )) # 该方法为同步的
p.apply_async(func, args=(i,)) # 该方法为异步的
# 使用apply_async 必须加的两句话
p.close() # 结束进程接收任务
p.join() # 感知进程池中的任务执行结束
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/18 21:05
# !@Author TrueNewBee # p = Pool()
# p.map(funcName, iterable) 默认异步的执行任务,且自带close和join
# p.apply 同步调用的
# p.apply_async 异步调用 和主进程完全异步 需要手动close 和join
import time
from multiprocessing import Pool def func(i1):
time.sleep(0.5)
return i1*i1 if __name__ == '__main__':
p = Pool()
# res_list = [] # 储存res对象 到后面一块被接收
# for i in range(10):
# res = p.apply_async(func, args=(i, )) # apply_async的结果就是func的返回值
# res_list.append(res)
# # res.get() # get() 等着func的计算结果,阻塞了(同步)
# for res in res_list:
# print(res.get()) # 每五个返回一次数据 让get()变成了异步 # map()
ret = p.map(func, range(100))
print(ret) # 整体返回所有数据
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/18 21:06
# !@Author TrueNewBee
# 回调函数
import os
from multiprocessing import Pool def func1(n):
print('in func1',os.getpid())
return n*n def func2(nn):
print('in func2', os.getpid())
print(nn) if __name__ == '__main__':
print('主进程:', os.getpid()) # 回调函数在主进程中执行的
p = Pool(5)
for i in range(10):
p.apply_async(func1, args=(10, ), callback=func2) # 回调func2返回值编程参数传给func1
p.close()
p.join()
7.18python进程池的更多相关文章
- python进程池:multiprocessing.pool
本文转至http://www.cnblogs.com/kaituorensheng/p/4465768.html,在其基础上进行了一些小小改动. 在利用Python进行系统管理的时候,特别是同时操作多 ...
- 64位进程池HashCode兼容处理
背景 net旧项目使用32位生成的HashCode,存储到数据库中.迁移到64位上,就需要对HashCode做兼容处理. 解决方案 1:进程池配置支持32位程序. 2:对Hashcode做兼容处理,[ ...
- Linux客户/服务器程序设计范式2——并发服务器(进程池)
引言 让服务器在启动阶段调用fork创建一个子进程池,通过子进程来处理客户端请求.子进程与父进程之间使用socketpair进行通信(为了方便使用sendmsg与recvmsg,如果使用匿名管道,则无 ...
- PYTHON多进程编码结束之进程池POOL
结束昨晚开始的测试. 最后一个POOL. A,使用POOL的返回结果 #coding: utf-8 import multiprocessing import time def func(msg): ...
- python(进程池/线程池)
进程池 import multiprocessing import time def do_calculation(data): print(multiprocessing.current_proce ...
- python进程池剖析(三)
之前文章对python中进程池的原理.数据流以及应用从代码角度做了简单的剖析,现在让我们回头看看标准库中对进程池的实现都有哪些值得我们学习的地方.我们知道,进程池内部由多个线程互相协作,向客户端提供可 ...
- python进程池剖析(二)
之前文章中介绍了python中multiprocessing模块中自带的进程池Pool,并对进程池中的数据结构和各个线程之间的合作关系进行了简单分析,这节来看下客户端如何对向进程池分配任务,并获取结果 ...
- python进程池剖析(一)
python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...
- python多进程,以及进程池并发
模拟多进程 #!/usr/bin/env python#-*- coding:utf-8 -*-import timefrom multiprocessing import Process def s ...
随机推荐
- Three-js 创建第一个3D场景
1.一个场景至少需要的三种类型组件 相机/决定哪些东西将在屏幕上渲染 光源/他们会对材质如何显示,以及生成阴影时材质如何使用产生影响 物体/他们是在相机透视图里主要的渲染队形:方块.球体等 ...
- kettle教程二
转载:http://www.cnblogs.com/limengqiang/archive/2013/01/16/KettleApply2.html 1.应用场景 这里简单概括一下几种具体的应用场景, ...
- 使用monkey技术修改python requests模块
例如请求前和请求后各来一条日志,这样就不需要在自己的每个代码都去加日志了. 其实也可以直接记录'urllib3.connectionpool' logger name的日志. 修改了requests ...
- [原]unity3D bug记录
1.u3d 发出的xcode工程 崩溃出现这种信息 Display::DisplayLinkItem::dispatch() 到AppController.mm 修改成这样 - (void) Repa ...
- Git Step by Step – (6) Git远程仓库
前面文章中出现的所有Git操作都是基于本地仓库的,但是日常工作中需要多人合作,不可能一直都在自己的代码仓库工作.所以,这里我们就开始介绍Git远程仓库. 在Git系统中,用户可以通过push/pull ...
- swift--CATransform3D的简单介绍
今天来了解下CATransform3D的一些基本的知识.CATransform3D是一个用于处理3D形变的类,其可以改变控件的平移.缩放.旋转.斜交等,其坐标系统采用的是三维坐标系,即向右为x轴正方向 ...
- Docker应用之仓库
仓库是存放镜像的地方 注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,每个仓库也可以有多个镜像 如 dl.dockerpool.com/ubuntu ,dl.dockerpool.com ...
- Robot Framework进行web ui自动化测试,浏览器配置说明
转载请注明出处,谢谢: chrome浏览器: 1.从如下地址下载与本地浏览器版本号一致的chromedriver.exe驱动文件: http://chromedriver.storage.google ...
- SQL筛选出同一学科的时间最新的记录
1.建表语句 CREATE TABLE `score` ( `id` ) NOT NULL AUTO_INCREMENT, `student_id` ) ' COMMENT '学生表ID', `nam ...
- 很好用的php在线调试工具
什么叫在线调试?就是在线上生产环境进行调试,假设有一天某个用户报某个页面某个数据怎么不对啊,看来线上出BUG了,于是你要迅速找出原因,首先看日志,可是悲剧的没有足够的日志让你确定线上BUG的原因,也许 ...