Python多线程多进程实例对比解析
作者:我太难了008 发布时间:2022-10-09 16:43:20
标签:Python,多,线程,进程
多线程适合于多io操作
多进程适合于耗cpu(计算)的操作
# 多进程编程
# 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor
def fib(n):
if n <= 2:
return 1
return fib(n - 2) + fib(n - 1)
if __name__ == '__main__':
# 1. 对于耗cpu操作,多进程优于多线程
# with ThreadPoolExecutor(3) as executor:
# all_task = [executor.submit(fib, num) for num in range(25, 35)]
# start_time = time.time()
# for future in as_completed(all_task):
# data = future.result()
# print(data)
# print("last time :{}".format(time.time() - start_time)) # 3.905290126800537
# 多进程 ,在window环境 下必须放在main方法中执行,否则抛异常
with ProcessPoolExecutor(3) as executor:
all_task = [executor.submit(fib, num) for num in range(25, 35)]
start_time = time.time()
for future in as_completed(all_task):
data = future.result()
print(data)
print("last time :{}".format(time.time() - start_time)) # 2.6130592823028564
可以看到在耗cpu的应用中,多进程明显优于多线程 2.6130592823028564 < 3.905290126800537
下面模拟一个io操作
# 多进程编程
# 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor
def io_operation(n):
time.sleep(2)
return n
if __name__ == '__main__':
# 1. 对于耗cpu操作,多进程优于多线程
# with ThreadPoolExecutor(3) as executor:
# all_task = [executor.submit(io_operation, num) for num in range(25, 35)]
# start_time = time.time()
# for future in as_completed(all_task):
# data = future.result()
# print(data)
# print("last time :{}".format(time.time() - start_time)) # 8.00358772277832
# 多进程 ,在window环境 下必须放在main方法中执行,否则抛异常
with ProcessPoolExecutor(3) as executor:
all_task = [executor.submit(io_operation, num) for num in range(25, 35)]
start_time = time.time()
for future in as_completed(all_task):
data = future.result()
print(data)
print("last time :{}".format(time.time() - start_time)) # 8.12435245513916
可以看到 8.00358772277832 < 8.12435245513916, 即是多线程比多进程更牛逼!
来源:https://www.cnblogs.com/z-qinfeng/p/12064012.html


猜你喜欢
- Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持
- 本文实例讲述了Python实现的自定义多线程多进程类。分享给大家供大家参考,具体如下:最近经常使用到对大量文件进行操作的程序以前每次写的时候
- rs.open sql,conn:如果sql是delete,update,insert则会返
- 例如,如果列a被定义为unique,并且值为1,则下列语句有同样的效果,也就是说一旦出入的记录中存在a=1的情况,直接更新c = c + 1
- 函数嵌套,这个名字有点纠结,也许不太好理解。一个比较常见的函数嵌套特例:递归函数,即函数自己嵌套自己。 一直以为在PHP中不能有太多的函数嵌
- 写在前面SciPy的optimize模块提供了许多数值优化算法,下面对其中的一些记录。非线性方程组求解SciPy中对非线性方程组求解是fsl
- 如今,基本每个网站都会需要到Tab切换展示内容的滑动门效果应用,这种效果可以在更少的页面空间内,展示更多的网站内容,节约空间,方便用户集中操
- Web性能优化最佳实践中最重要的一条是减少HTTP请求,它也是YSlow中比重最大的一条规则。减少HTTP请求的方案主要有合并JavaScr
- Web_THBC 为表示层也就是页面(.aspx) BLL_THBC 为业务逻辑层 DAL_THBC 为数据库交互层 (向数据库执行SQL语
- 好东西找起来很麻烦,好用的又不太容易找到,之前看到很多用JS写的,固定漂浮这种效果拖动时难免会产生抖动,自己对CSS还是蛮有好感的,找来找去
- Python自动化测试 Eclipse+Pydev 搭建开发环境C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很
- 本文实例讲述了Python从MP3文件获取id3的方法。分享给大家供大家参考。具体如下:def getID3(filename): &nbs
- 1、get方法请求接口url:显而易见,就是接口的地址url啦headers:请求头,例如:content-type = applicati
- 服务器代理proxyTable配置解决跨域1、Proxy代理作用proxy代理作用:前端服务器代理的作用是,告诉服务器任何未知请求(没有匹配
- 博主在进行鼎食城毕业设计时,需要实现一个人脸识别登录功能,想到可以利用百度的人脸识别接口来完成,于是便去下载了百度的识别SDK,我用的是PH
- 通过创建变量var a = 'something' + '  
- 问题描述输入样例:Only the 11 CAPItal LeTtERS are replaced输出样例:Only the 11 XZKI
- 什么是触发器MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序。触发器是由事件来触发某个操作,这些事件包括
- vue+element表格实现多层数据嵌套今天用element的表格渲染了商城的购物车列表,element的表格之前也用到过,它把所有的东西
- <script language="javascript" type="text/javascript&