简单谈谈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 相关文章推荐
实例讲解python函数式编程
Jun 09 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Python选课系统开发程序
Sep 02 Python
django+js+ajax实现刷新页面的方法
May 22 Python
Python给你的头像加上圣诞帽
Jan 04 Python
python字符串的方法与操作大全
Jan 30 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
linux安装python修改默认python版本方法
Mar 31 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
使用python动态生成波形曲线的实现
Dec 04 Python
关于Python中定制类的比较运算实例
Dec 19 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 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
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
python pygame实现方向键控制小球
2019/05/17 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
如何理解Python中包的引入
2020/05/29 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
应届生会计求职信
2013/11/11 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
爱情保证书大全
2014/04/29 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
小学班级口号
2014/06/09 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书