Python 多进程
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 多进程相关推荐
- python多进程详解
目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...
- Python 多进程开发与多线程开发
我们先来了解什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...
- python多进程_python语法:多进程
之前在一篇文章中写过,有关于Python线程的问题: 是枝裕和:内:用python多线程同时处理大量文件zhuanlan.zhihu.com 当然我的写的文章都是面对于一些初学者和python代码实 ...
- 取代Python多进程!伯克利开源分布式框架Ray
Ray由伯克利开源,是一个用于并行计算和分布式Python开发的开源项目.本文将介绍如何使用Ray轻松构建可从笔记本电脑扩展到大型集群的应用程序. 并行和分布式计算是现代应用程序的主要内容.我们需要利 ...
- python 多进程_说说Python多线程与多进程的区别?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...
- python多进程存储数据_Python 多进程及进程间通信
python 因 GIL 的存在,处理计算密集型的任务时无法高效利用多核 CPU 的计算资源,这时就需要使用多进程来提高对 CPU 的资源利用.Python 多进程主要用 multiprocessin ...
- python 多进程异常处理
前言 最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较'重'的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较'重' ...
- python多进程断点续传分片下载器
python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...
- Python 多进程、多线程启动
本文仅供学习交流使用,如侵立删!demo下载见文末 Python 多进程启动 def main(self, num):"""多进程启动ValueError: Pool n ...
- Python 多进程的进程池pool运行时报错:ValueError: Pool not running
本文仅供学习交流使用,如侵立删!demo下载见文末 Python 多进程的进程池pool运行时报错:ValueError: Pool not running def main(self, num):& ...
最新文章
- Kafka简介、安装
- Flask --- 框架快速入门
- 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
- zabbix1.8.5安装
- uuid java 36位_java 生成UUID 36位码 36位码
- 红linux系统,红帽子linux系统
- 模拟网络丢包的linux,简述Linux模拟丢包
- ubuntu14.04下deb文件安装mysql数据库
- java一天一只顽猴想去从山脚_异乡苦境救顽猴
- 动手学深度学习(六、卷积神经网络)
- mysql中year函数算年龄_MySQL中的YEAR函数
- 职工考勤管理信息系统数据库课设_公司员工考勤管理信息系统的设计与实现
- Fedora 9在用VMware 5.5、6.5虚拟机安装和硬盘安装中遇见的几点问题
- DSP48E功能描述
- 包包各部位名称图解_手袋各部位名称及详解
- HRBU_20211112训练
- HTML(一):行级标签、块级标签、其他标签
- 技术知识库——C1见习能力认证(应用软件开发的基础知识)
- 买学生台灯应该怎么选择?挑选国AA级照度的护眼台灯
- eagle转载自乐视大数据部高级hadoop工程师蔡华宇
热门文章
- Python统计Excel文件中超市营业额明细数据
- Python使用多进程批量判断素数
- 开多线程出现importerror_那些年让你迷惑的并行、并发、多线程、多进程、协程...
- 1 1 2 3 5 8 java_1 1 2 3 5 8 13 21 34规律:一个数据等于前两个数之和.用java做,输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值....
- C语言内存的动态分配
- java接口自动化+博客园_java+接口自动化+eclipse之-----环境搭建
- java for循环时间最短_Java For循环vs While循环,奇怪的行为和时间性能
- mysql日志存储类型_msyql 日志分类、存储、慢查询日志
- oracle调用MySQL函数,Oracle的INSTR函数MySQL实现
- ubuntu指向python3_ubuntu安装python3.7,并更新python默认指向为python3.7