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 ...
随机推荐
- BarTender 2016表单中的“秤显示”控件
BarTender 2016中的表单是一个非常实用的工具,它可以实现数据输出提示,查询提示和同一表单的记录选择.这些都离开可供添加的控件,“秤显示”控件也是我们打印尝尝需要涉及的,今天我们就来看看什么 ...
- mysql 两台主主复制配置
A.服务器 [mysqld] # The TCP/IP Port the MySQL Server will listen on port= server-id= #master-host=10.1. ...
- hibernate 之 sql查询
如果用hibernate执行原生sql进行数据查询可以调用 SQLQuery query = getSession().createSQLQuery(sql); 然后再执行 query.list() ...
- Linux Shell 通配符、元字符、转义符使用实例介绍
https://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html
- 关于python 的空的__init__.py文件的作用,可不可以删除,到底有没有用?
0.声明,本篇只讨论空__init__.py文件的情况,不顾前提非得说__init__.py文件里面也可以写东西的不在此讨论了范围之内,重点是个"空"字. 1.很多地方的文件夹都有 ...
- jrMz and angles(水题)
jrMz and angles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- html5页面平滑切换实现以及问题(20160120更新)
注:本文是基于手机端 Hybrid APP 讨论,而不是普通的PC端网页 >> 之前的页面跳转方式: 比如有这两个页面:A.html B.html, A B 是纯HTML实现,没有采用 ...
- Explaining Delegates in C# - Part 2 (Events 1)
In my previous post, I spoke about a few very basic and simple reasons of using delegates - primaril ...
- WF的初步学习与创建
一直在好奇WF的学习,嘿嘿,今天就不用啦,我之后就要接触WF的项目,刚开始在百度上寻找WF新建一个项目的过程,发现很少这样的实例让我学习操作,我想给我一个大的项目我也不可能一下就知道应该怎样去操作,由 ...
- FTP文件下载
using EnterpriseDT.Net.Ftp; /// <summary> /// 下载FTP文件 /// </summary> /// <param name= ...