1.Python 多进程

类型 CPU密集型操作 IO密集型操作 网络请求密集型操作
线性操作 94.91824996 22.46199995 7.3296
多线程操作 101.1700001 24.8605001 0.505333265
多进程操作 53.88999999 12.78400004 0.504500032

通过上表我们可以看到:

多线程在IO密集型的操作下似乎也没有很大的优势(也许IO操作的任务再繁重一些就能体现出优势),在CPU密集型的操作下明显地比单线程线性执行性能更差,但是对于网络请求这种忙等阻塞线程的操作,多线程的优势便非常显著了
多进程无论是在CPU密集型还是IO密集型以及网络请求密集型(经常发生线程阻塞的操作)中,都能体现出性能的优势。不过在类似网络请求密集型的操作上,与多线程相差无几,但却更占用CPU等资源,所以对于这种情况下,我们可以选择多线程来执行

构造方法 描述
target 执行的方法
name 进程名
args 执行方法的参数
实例方法 描述
is_alive() 查看进程是否正在运行
join() 阻塞进程
start() 开始进程
run() 被start()调用
terminate() 停止进程
属性 描述
name 进程名字
pid 进程编号
daemon 守护进程

2.例子
2.1 使用多线程运行函数

import multiprocessing as mp
def count():for i in range(1000):print(i)
#只有在本程序为主程序的时候运行接下来的代码
#每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的#变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果#import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“__main__”等于当#前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,__name__ == 'main'结#果为真。
if __name__ == "__main__":
#注意这里的target调用的函数是函数名称,不能带();另外Process第一个字母大写p1=mp.Process(target=count)p2=mp.Process(target=count)p1.start()p2.start()

在运行结果中我们可以看到这样的片段:
152
953
153
154
155
156
157
954
158
955
159
956
160
说明在执行第一个循环的进程中,并发开始执行了第二个进程,两个循环进程是同时进行的。

2.2 daemon

import multiprocessing as mp
def count1():for i in range(10):print(i)
def count2():for i in range(10):print(i*10)
if __name__ == "__main__":p1=mp.Process(target=count1)p2=mp.Process(target=count2)
#进程的属性一定要在进程开始前设置p1.daemon=Truep1.start()p2.start()print("Done")

输出的结果为:
Done
0
10
20
30
40
50
60
70
80
90
我们可以看到主程序先运行结束,打印了“Done”,由于count1的进程没有设置保护进程,所以主程序结束后,count1进程也被终止了。但是,count2由于被设置了程度保护,所以count2进程并没有随着主程序的终止而终止。
2.3 lock
lock用来处理共享资源的访问,避免访问冲突
2.4 Semaphore
Semaphore限制访问数量
2.5 Event
Event用来实现进程间的同步通信
2.6 Queue
多进程安全队列,用于实现进程间的数据传递。
2.7 Pipe
2.8 Pool

参考文献:
http://www.cnblogs.com/kaituorensheng/p/4445418.html#_label3
http://python.jobbole.com/86822/

Python 多进程相关推荐

  1. python多进程详解

    目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...

  2. Python 多进程开发与多线程开发

    我们先来了解什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...

  3. python多进程_python语法:多进程

    之前在一篇文章中写过,有关于Python线程的问题: 是枝裕和:内:用python多线程同时处理大量文件​zhuanlan.zhihu.com 当然我的写的文章都是面对于一些初学者和python代码实 ...

  4. 取代Python多进程!伯克利开源分布式框架Ray

    Ray由伯克利开源,是一个用于并行计算和分布式Python开发的开源项目.本文将介绍如何使用Ray轻松构建可从笔记本电脑扩展到大型集群的应用程序. 并行和分布式计算是现代应用程序的主要内容.我们需要利 ...

  5. python 多进程_说说Python多线程与多进程的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  6. python多进程存储数据_Python 多进程及进程间通信

    python 因 GIL 的存在,处理计算密集型的任务时无法高效利用多核 CPU 的计算资源,这时就需要使用多进程来提高对 CPU 的资源利用.Python 多进程主要用 multiprocessin ...

  7. python 多进程异常处理

    前言 最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较'重'的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较'重' ...

  8. python多进程断点续传分片下载器

    python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...

  9. Python 多进程、多线程启动

    本文仅供学习交流使用,如侵立删!demo下载见文末 Python 多进程启动 def main(self, num):"""多进程启动ValueError: Pool n ...

  10. Python 多进程的进程池pool运行时报错:ValueError: Pool not running

    本文仅供学习交流使用,如侵立删!demo下载见文末 Python 多进程的进程池pool运行时报错:ValueError: Pool not running def main(self, num):& ...

最新文章

  1. Kafka简介、安装
  2. Flask --- 框架快速入门
  3. 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
  4. zabbix1.8.5安装
  5. uuid java 36位_java 生成UUID 36位码 36位码
  6. 红linux系统,红帽子linux系统
  7. 模拟网络丢包的linux,简述Linux模拟丢包
  8. ubuntu14.04下deb文件安装mysql数据库
  9. java一天一只顽猴想去从山脚_异乡苦境救顽猴
  10. 动手学深度学习(六、卷积神经网络)
  11. mysql中year函数算年龄_MySQL中的YEAR函数
  12. 职工考勤管理信息系统数据库课设_公司员工考勤管理信息系统的设计与实现
  13. Fedora 9在用VMware 5.5、6.5虚拟机安装和硬盘安装中遇见的几点问题
  14. DSP48E功能描述
  15. 包包各部位名称图解_手袋各部位名称及详解
  16. HRBU_20211112训练
  17. HTML(一):行级标签、块级标签、其他标签
  18. 技术知识库——C1见习能力认证(应用软件开发的基础知识)
  19. 买学生台灯应该怎么选择?挑选国AA级照度的护眼台灯
  20. eagle转载自乐视大数据部高级hadoop工程师蔡华宇

热门文章

  1. Python统计Excel文件中超市营业额明细数据
  2. Python使用多进程批量判断素数
  3. 开多线程出现importerror_那些年让你迷惑的并行、并发、多线程、多进程、协程...
  4. 1 1 2 3 5 8 java_1 1 2 3 5 8 13 21 34规律:一个数据等于前两个数之和.用java做,输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值....
  5. C语言内存的动态分配
  6. java接口自动化+博客园_java+接口自动化+eclipse之-----环境搭建
  7. java for循环时间最短_Java For循环vs While循环,奇怪的行为和时间性能
  8. mysql日志存储类型_msyql 日志分类、存储、慢查询日志
  9. oracle调用MySQL函数,Oracle的INSTR函数MySQL实现
  10. ubuntu指向python3_ubuntu安装python3.7,并更新python默认指向为python3.7