主要方法  常用的就是   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进程池的更多相关文章

  1. python进程池:multiprocessing.pool

    本文转至http://www.cnblogs.com/kaituorensheng/p/4465768.html,在其基础上进行了一些小小改动. 在利用Python进行系统管理的时候,特别是同时操作多 ...

  2. 64位进程池HashCode兼容处理

    背景 net旧项目使用32位生成的HashCode,存储到数据库中.迁移到64位上,就需要对HashCode做兼容处理. 解决方案 1:进程池配置支持32位程序. 2:对Hashcode做兼容处理,[ ...

  3. Linux客户/服务器程序设计范式2——并发服务器(进程池)

    引言 让服务器在启动阶段调用fork创建一个子进程池,通过子进程来处理客户端请求.子进程与父进程之间使用socketpair进行通信(为了方便使用sendmsg与recvmsg,如果使用匿名管道,则无 ...

  4. PYTHON多进程编码结束之进程池POOL

    结束昨晚开始的测试. 最后一个POOL. A,使用POOL的返回结果 #coding: utf-8 import multiprocessing import time def func(msg): ...

  5. python(进程池/线程池)

    进程池 import multiprocessing import time def do_calculation(data): print(multiprocessing.current_proce ...

  6. python进程池剖析(三)

    之前文章对python中进程池的原理.数据流以及应用从代码角度做了简单的剖析,现在让我们回头看看标准库中对进程池的实现都有哪些值得我们学习的地方.我们知道,进程池内部由多个线程互相协作,向客户端提供可 ...

  7. python进程池剖析(二)

    之前文章中介绍了python中multiprocessing模块中自带的进程池Pool,并对进程池中的数据结构和各个线程之间的合作关系进行了简单分析,这节来看下客户端如何对向进程池分配任务,并获取结果 ...

  8. python进程池剖析(一)

    python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...

  9. python多进程,以及进程池并发

    模拟多进程 #!/usr/bin/env python#-*- coding:utf-8 -*-import timefrom multiprocessing import Process def s ...

随机推荐

  1. QT QGraphicsProxyWidget对象可选择或移动的一些tricks

    我在QT图形视图框架中使用QGraphicsProxyWidget嵌入widget,但是无法使其和其它的QGraphicsItem一样可以选择或移动,使用如下语句无效:  C++ Code  1234 ...

  2. IT规划,是否一定要梳理流程

    IT规划,是面向企业业务的 IT战略规划,必然需要考虑业务的运营特点和需求.以往为企业提供IT规划咨询服务时,很多企业都提出,IT规划要满足业务的需求,那就要对业务足够熟 悉,而通过梳理流程能够达到这 ...

  3. git同时提交到两个仓库

    有时候一个项目,希望既提交到oschina又提交到公司内网的gitlab,或者是github什么的. 使用git remote -v 查看当前git的远程仓库. 添加一个远程仓库 git remote ...

  4. [原]unity3d GLSL无法pc上显示

    pc编写GLSL: Shader "Custom/GLSL" {    Properties {        _MainTex ("Base (RGB)", ...

  5. 开源一个简易轻量的reactor网络框架

    github https://github.com/sea-boat/net-reactor net-reactor it's a simple and easy net framework with ...

  6. 【数据分析】Superset 之三 Docker操作管理

    一.进入容器 查看运行的容器:docker ps docker attach confident_thompson 或者 docker attach 34cd2299110f docker exec ...

  7. 04python while循环语句

    使用while ture语法 luck_num = 33 flag = True while flag: guess_num = input('请输入您猜测的年龄:') if guess_num &l ...

  8. 【代码审计】711cms_V1.0.5 目录遍历漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  9. Python时间戳与时间字符串互相转换实例代码

    #设a为字符串import timea = "2011-09-28 10:00:00" #中间过程,一般都需要将字符串转化为时间数组time.strptime(a,'%Y-%m-% ...

  10. linux 开机自启

    cd /home/dpf 1.vi startup.sh #!/bin/shecho "hello world" >> /home/dpf/test.txt vi mq ...