简单谈谈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字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
Python解释执行原理分析
Aug 22 Python
Python通过select实现异步IO的方法
Jun 04 Python
Python实现自动登录百度空间的方法
Jun 10 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
如何基于python操作excel并获取内容
Dec 24 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
Django实现从数据库中获取到的数据转换为dict
Mar 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 中英文语言转换类
2011/09/07 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
PHP在线生成二维码代码(google api)
2013/06/03 PHP
PHP函数超时处理方法
2016/02/14 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
微信小程序保持session会话的方法
2020/03/20 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
django中模板的html自动转意方法
2018/05/27 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
数字漫画:comiXology
2020/06/13 全球购物
当当网软件测试笔试题
2015/11/24 面试题
管理科学大学生求职信
2013/11/13 职场文书
现实表现材料范文
2014/12/23 职场文书
写给导师的自荐信
2015/03/06 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server