简单谈谈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 set集合类型操作总结
Nov 07 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
python3模块smtplib实现发送邮件功能
May 22 Python
Python读写zip压缩文件的方法
Aug 29 Python
python中强大的format函数实例详解
Dec 05 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
Python3并发写文件与Python对比
Nov 20 Python
python的range和linspace使用详解
Nov 27 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
python如何实现单链表的反转
Feb 10 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
用Python进行栅格数据的分区统计和批量提取
May 27 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 register_shutdown_function()函数的使用示例
2015/06/23 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
Laravel下生成验证码的类
2017/11/15 PHP
input按钮的事件处理大全
2010/12/10 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
python中的lambda表达式用法详解
2016/06/22 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python 多线程Threading初学教程
2017/08/22 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
python类共享变量操作
2020/09/03 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
Java语言的优势
2015/01/10 面试题
技术负责人任命书
2014/06/05 职场文书
庆国庆活动总结
2014/08/28 职场文书
英文自荐信范文
2015/03/25 职场文书
爱国主义影片观后感
2015/06/18 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
box-shadow单边阴影的实现
2023/05/21 HTML / CSS