简单谈谈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在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
Python查找文件中包含中文的行方法
Dec 19 Python
使用Python实现跳帧截取视频帧
May 31 Python
python向图片里添加文字
Nov 26 Python
Pycharm小白级简单使用教程
Jan 08 Python
python2和python3哪个使用率高
Jun 23 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
python 中的@运算符使用
May 26 Python
Django基础CBV装饰器和中间件
Mar 22 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
请求时token过期自动刷新token操作
2020/09/11 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python中进程和线程的区别详解
2017/10/29 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python psutil监控进程实例
2019/12/17 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
中英文求职信范文
2014/01/27 职场文书
村委会贫困证明范文
2014/09/21 职场文书
十佳少年事迹材料
2014/12/25 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
老乡会致辞
2015/07/28 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
Python面向对象编程之类的概念
2021/11/01 Python