简单谈谈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实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
Python中set与frozenset方法和区别详解
May 23 Python
详解Python装饰器由浅入深
Dec 09 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
keras.layer.input()用法说明
Jun 16 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 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实现的获取URL信息的类
2007/01/02 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
php中关于换行的实例写法
2019/09/26 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python实现抽奖小程序
2020/04/15 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
Python对wav文件的重采样实例
2020/02/25 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python中线程和进程有何区别
2020/06/17 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
银行实习生自我鉴定范文
2013/09/19 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
中秋节慰问信
2015/02/15 职场文书
环卫工作个人总结
2015/03/04 职场文书