简单谈谈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简单进程锁代码实例
Apr 27 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
Python 单例设计模式用法实例分析
Sep 23 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
python实现猜数游戏
Mar 27 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
Jupyter Notebook 安装配置与使用详解
Jan 06 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
php5新改动之短标记启用方法
2008/09/11 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
Javascript下拉刷新的简单实现
2017/02/14 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
实时获取Python的print输出流方法
2019/01/07 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
python处理大日志文件
2019/07/23 Python
python中栈的原理及实现方法示例
2019/11/27 Python
详解Python中namedtuple的使用
2020/04/27 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
澳大利亚家具商店:Freedom
2020/12/17 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
学校后勤岗位职责
2014/02/19 职场文书
cf战队收人口号
2014/06/21 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
暖春观后感
2015/06/08 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang