简单谈谈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中使用装饰器和元编程实现结构体类实例
Jan 28 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
python获取指定时间差的时间实例详解
Apr 11 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python global关键字的用法详解
Sep 05 Python
python实发邮件实例详解
Nov 11 Python
python创建学生管理系统
Nov 22 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
基于pandas向csv添加新的行和列
May 25 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
sphinx增量索引的一个问题
2011/06/14 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
jquery操作select大全
2014/04/25 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
Angular实现form自动布局
2016/01/28 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
JS实现多物体运动的方法详解
2018/01/23 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
在python中实现对list求和及求积
2018/11/14 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
python 杀死自身进程的实现方法
2019/07/01 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
统计专业自荐书
2014/07/06 职场文书
给下属加薪申请报告
2015/05/15 职场文书
初中物理教学反思
2016/02/19 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js