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 ...
随机推荐
- User Agent 里的各个字段含义
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.69 ...
- [Arch] 04. Software Architectural Patterns
让我们一起 回忆: 原则 基本认识 S 应该仅有一个引起它变化的原因 O 在不被修改的前提下被扩展 L 尽量从抽象类继承 I 应该依赖于抽象 D 倾向瘦接口 让我们开始 新课: [Design Pat ...
- org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'parentId' in 'class java.lang.String'
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ' ...
- SpringMVC由浅入深day01_5注解的处理器映射器和适配器
5 注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandle ...
- logback -- 配置详解 -- 四 -- <filter>
附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...
- mongodb 在 Ubuntu系统上的安装及卸载
mongodb官网 The mongodb-org-server package provides an initialization script that starts mongod with t ...
- 【代码审计】711cms_V1.0.5 目录遍历漏洞分析
0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...
- pyhton验证码识别
1.PIL 下载地址: PIL-1.1.7.win-amd64-py2.7.exe 2.tesseract-ocr下载地址: tesseract-ocr-setup-3.02.02.exe 3.pyt ...
- 使用 Splash
Splash 简介与安装 Splash Lua 脚本 Splash 对象属性 Splash 对象方法 Splash API 调用 Splash 负载均衡
- PHP多种序列化/反序列化的方法
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...