简单谈谈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 冒泡,选择,插入排序使用实例
Feb 05 Python
详解Python验证码识别
Jan 25 Python
Python自动发邮件脚本
Mar 31 Python
利用python求相邻数的方法示例
Aug 18 Python
Python中super函数的用法
Nov 17 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
Python函数调用追踪实现代码
Nov 27 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 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常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
Python自动登录126邮箱的方法
2015/07/10 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python代码实现图书管理系统
2020/11/30 Python
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
以下的初始化有什么区别
2013/12/16 面试题
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
行政部工作岗位职责范本
2014/03/05 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
给医院的感谢信
2015/01/21 职场文书
2016教师国培研修感言
2015/12/08 职场文书
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL