简单谈谈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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
python实现socket客户端和服务端简单示例
Feb 24 Python
整理Python最基本的操作字典的方法
Apr 24 Python
浅谈Python的垃圾回收机制
Dec 17 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
基于python实现百度翻译功能
May 09 Python
Python中@property的理解和使用示例
Jun 11 Python
django创建简单的页面响应实例教程
Sep 06 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
python 实现两个变量值进行交换的n种操作
Jun 02 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 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中的事务使用实例
2015/05/26 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
javascript 闭包详解
2015/02/15 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
linux下安装easy_install的方法
2013/02/10 Python
使用pdb模块调试Python程序实例
2015/06/02 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
新郎新娘婚礼答谢词
2014/01/11 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
质检员岗位职责
2015/02/03 职场文书
运动会班级前导词
2015/07/20 职场文书
2016年春节问候语
2015/11/11 职场文书
创业计划书介绍
2019/04/24 职场文书