简单谈谈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中使用pprint函数进行格式化输出的教程
Apr 07 Python
python实现外卖信息管理系统
Jan 11 Python
Python3处理HTTP请求的实例
May 10 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
解决python Markdown模块乱码的问题
Feb 14 Python
Python3远程监控程序的实现方法
Jul 15 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
Pytorch之view及view_as使用详解
Dec 31 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
php模板之Phpbean的目录结构
2008/01/10 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
Python检测生僻字的实现方法
2016/10/23 Python
python实现八大排序算法(2)
2017/09/14 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
军训自我鉴定100字
2014/02/13 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
公积金具结保证书
2015/05/11 职场文书
小学运动会宣传稿
2015/07/23 职场文书
高中团支书竞选稿
2015/11/21 职场文书
python之基数排序的实现
2021/07/26 Python