加载中…
个人资料
海阔天空
海阔天空
  • 博客等级:
  • 博客积分:0
  • 博客访问:41,820
  • 关注人气:19
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

【Multiprocessing系列】Multiprocessing基础--zz

(2017-05-31 09:41:19)

【Multiprocessing系列】Multiprocessing基础

2017/05/26 · 基础知识 · multiprocessing多进程并行

分享到:0
原文出处: nMask's Blog   

multiprocessing是Python的标准模块,它既可以用来编写多进程,也可以用来编写多线程。如果是多线程的话,用multiprocessing.dummy即可,用法与multiprocessing基本相同,这里主要介绍多进程的用法,欢迎纠错。

(一)Multiprocessing介绍

为什么要使用python多进程?

因为python使用全局解释器锁(GIL),他会将进程中的线程序列化,也就是多核cpu实际上并不能达到并行提高速度的目的,而使用多进程则是不受限的,所以实际应用中都是推荐多进程的。
如果每个子进程执行需要消耗的时间非常短(执行+1操作等),这不必使用多进程,因为进程的启动关闭也会耗费资源。
当然使用多进程往往是用来处理CPU密集型(科学计算)的需求,如果是IO密集型(文件读取,爬虫等)则可以使用多线程去处理。

multiprocessing常用组件及功能

创建管理进程模块:

  • Process(用于创建进程模块)
  • Pool(用于创建管理进程池)
  • Queue(用于进程通信,资源共享)
  • Value,Array(用于进程通信,资源共享)
  • Pipe(用于管道通信)
  • Manager(用于资源共享)

同步子进程模块:

  • Condition
  • Event
  • Lock
  • RLock
  • Semaphore

(二)Multiprocessing进程管理模块

说明:由于篇幅有限,模块具体用法结束请参考每个模块的具体链接。

Process模块

Process模块用来创建子进程,是Multiprocessing核心模块,使用方式与Threading类似,可以实现多进程的创建,启动,关闭等操作。
具体介绍请参考:Process模块介绍

Pool模块

Pool模块是用来创建管理进程池的,当子进程非常多且需要控制子进程数量时可以使用此模块。
具体介绍请参考:Pool模块介绍

Queue模块

Queue模块用来控制进程安全,与线程中的Queue用法一样。

Pipe模块

Pipe模块用来管道操作。

Manager模块

Manager模块常与Pool模块一起使用,作用是共享资源。

(三)Multiprocessing同步进程模块

Lock模块

作用:当多个进程需要访问共享资源的时候,Lock可以用来避免访问的冲突。

具体场景:所有的任务在打印的时候都会向同一个标准输出(stdout)输出。这样输出的字符会混合在一起,无法阅读。使用Lock同步,在一个任务输出完成之后,再允许另一个任务输出,可以避免多个任务同时向终端输出。

代码实现:

  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有