简单谈谈python中的多进程


Posted in Python onNovember 06, 2016

进程是由系统自己管理的。

1:最基本的写法

from multiprocessing import Pool

def f(x):
  return x*x

if __name__ == '__main__':
  p = Pool(5)
  print(p.map(f, [1, 2, 3]))
[1, 4, 9]

2、实际上是通过os.fork的方法产生进程的

unix中,所有进程都是通过fork的方法产生的。

multiprocessing Process
os

info(title):
  title
  , __name__
  (os, ): , os.getppid()
  , os.getpid()

f(name):
  info()
  , name

__name__ == :
  info()
  p = Process(=f, =(,))
  p.start()
  p.join()

3、线程共享内存

threading

run(info_list,n):
  info_list.append(n)
  info_list

__name__ == :
  info=[]
  i ():
    p=threading.Thread(=run,=[info,i])
    p.start()
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

进程不共享内存:

multiprocessing Process
run(info_list,n):
  info_list.append(n)
  info_list

__name__ == :
  info=[]
  i ():
    p=Process(=run,=[info,i])
    p.start()
[1]
[2]
[3]
[0]
[4]
[5]
[6]
[7]
[8]
[9]

若想共享内存,需使用multiprocessing模块中的Queue

multiprocessing Process, Queue
f(q,n):
  q.put([n,])

__name__ == :
  q=Queue()
  i ():
    p=Process(=f,=(q,i))
    p.start()
  :
    q.get()

4、锁:仅是对于屏幕的共享,因为进程是独立的,所以对于多进程没有用

multiprocessing Process, Lock
f(l, i):
  l.acquire()
  , i
  l.release()

__name__ == :
  lock = Lock()

  num ():
    Process(=f, =(lock, num)).start()
hello world 0
hello world 1
hello world 2
hello world 3
hello world 4
hello world 5
hello world 6
hello world 7
hello world 8
hello world 9

5、进程间内存共享:Value,Array

multiprocessing Process, Value, Array

f(n, a):
  n.value = i ((a)):
    a[i] = -a[i]

__name__ == :
  num = Value(, )
  arr = Array(, ())

  num.value
  arr[:]

  p = Process(=f, =(num, arr))
  p.start()
  p.join()
0.0
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3.1415927
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

#manager共享方法,但速度慢

multiprocessing Process, Manager

f(d, l):
  d[] = d[] = d[] = l.reverse()

__name__ == :
  manager = Manager()

  d = manager.dict()
  l = manager.list(())

  p = Process(=f, =(d, l))
  p.start()
  p.join()

  d
  l
# print '-------------'这里只是另一种写法
# print pool.map(f,range(10))
{0.25: None, 1: '1', '2': 2}
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

#异步:这种写法用的不多

multiprocessing Pool
time
f(x):
  x*x
  time.sleep()
  x*x

__name__ == :
  pool=Pool(=)
  res_list=[]
  i ():
    res=pool.apply_async(f,[i])  res_list.append(res)

  r res_list:
    r.get(timeout=10) #超时时间

同步的就是apply

Python 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
Python中集合类型(set)学习小结
Jan 28 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Python 如何对文件目录操作
Jul 10 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
python自带的http模块详解
Nov 06 #Python
Python程序中设置HTTP代理
Nov 06 #Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 #Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 #Python
读写json中文ASCII乱码问题的解决方法
Nov 05 #Python
django1.8使用表单上传文件的实现方法
Nov 04 #Python
Python+MongoDB自增键值的简单实现
Nov 04 #Python
You might like
PHP APC配置文件2套和参数详解
2014/06/11 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
传智播客学习之java 反射
2009/11/22 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
微信小程序实现天气预报功能
2018/07/18 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
koa-router源码学习小结
2018/09/07 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
快速了解Python开发环境Spyder
2020/06/29 Python
python利用faker库批量生成测试数据
2020/10/15 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
个人课题方案
2014/05/08 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
会计求职自荐信范文
2015/03/04 职场文书
Java 数组的使用
2022/05/11 Java/Android