简单谈谈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 相关文章推荐
Pyhton中防止SQL注入的方法
Feb 05 Python
Python提取网页中超链接的方法
Sep 18 Python
Python3 socket同步通信简单示例
Jun 07 Python
python正则中最短匹配实现代码
Jan 16 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
django输出html内容的实例
May 27 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
python爬取音频下载的示例代码
Oct 19 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
python3实现无权最短路径的方法
May 12 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二维数组转成字符串示例
2014/02/17 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
php制作简单模版引擎
2016/04/07 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
2019/08/16 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
如何利用find命令查找文件
2015/02/07 面试题
思想政治自我鉴定
2013/10/06 职场文书
生日派对邀请函
2014/01/13 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript