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 ...
随机推荐
- ABBYY FineReader 12没你想得那么简单
你是否觉得自己对ABBYY FineReader 12已经了如指掌了?也许你会认为它不过就是一款OCR文字识别软件,能够快速方便地将扫描纸质文档.PDF文件或者数码相机的图像转换为可编辑.可搜索的格式 ...
- cakephp文件结构
一个项目的开发会用到cakephp的那些文件呢? 如果你的项目使用cake1.3.6,那么可以参考下面的内容 根据我的经验,会涉及一下文件夹: config controllers models ...
- MLE、MAP、贝叶斯三种估计框架
三个不同的估计框架. MLE最大似然估计:根据训练数据,选取最优模型,预测.观测值D,training data:先验为P(θ). MAP最大后验估计:后验概率. Bayesian贝叶斯估计:综合模型 ...
- Line云端全自动加好友机器人
一个 LINE 帐号可以加入 5,000 名好友,让这些 5,000 名好友收到 LINE 的主动提醒,好友会看到我的头像.主页照片.姓名与状态消息等,这种行为称为 LINE 的曝光. 如果我们要针对 ...
- 中证500等主要指数的市盈率(PE)估值高度
全指医药(SH000991) - 2018-10-18日,当前值:22.8575,平均值:36.88,中位数:36.27655,当前 接近历史新低.全指医药(SH000991)的历史市盈率PE详情 中 ...
- go语言之PLAN9汇编
http://blog.studygolang.com/2013/05/asm_and_plan9_asm/ https://lrita.github.io/2017/12/12/golang-asm ...
- re.match re.search re.findall区别
re正则表达式里面,常用的三种方法的区别. re.macth和search匹配得到的是match对象,findall得到的是一个列表. match从字符串开头开始匹配,search返回与正则表达式匹配 ...
- Apache性能优化总结
1.介绍 首先要了解Apache采用的MPM(Multi -Processing Modules,多道处理模块),MPM是Apache的核心,它的作用是管理网络连接.调度请求.Apache2.0中MP ...
- js中对象的深度复制
// 对象的深度复制 cloneObj(oldObj) var cloneObj = function (obj) { var newObj = {}; if (obj instanceof Arra ...
- 彻底关闭Google的安全搜索
在使用简体中文的情况下,访问Google总是会跳转到香港,这个时候的安全搜索是无法关闭的. 下面介绍一个最简单的方法,直接使用Google的中文界面:https://www.google.com/we ...