Python多线程多进程实例对比解析


Posted in Python onMarch 12, 2020

多线程适合于多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, 即是多线程比多进程更牛逼!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理json数据中的中文
Mar 06 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
Python常用的爬虫技巧总结
Mar 28 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Python新手学习函数默认参数设置
Jun 03 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
Python实现随机生成迷宫并自动寻路
Jun 13 Python
Python线程协作threading.Condition实现过程解析
Mar 12 #Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 #Python
Python基于read(size)方法读取超大文件
Mar 12 #Python
Python函数生成器原理及使用详解
Mar 12 #Python
python deque模块简单使用代码实例
Mar 12 #Python
python中安装django模块的方法
Mar 12 #Python
python3 sorted 如何实现自定义排序标准
Mar 12 #Python
You might like
MYSQL环境变量设置方法
2007/01/15 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python编写俄罗斯方块
2020/03/13 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
如何在python中实现线性回归
2020/08/10 Python
类、抽象类、接口的差异
2016/06/13 面试题
怎样声明一个匿名的内部类
2016/06/01 面试题
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
法语专业求职信
2014/07/20 职场文书
2016年暑期社会实践活动总结报告
2016/04/06 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
SpringBoot 集成Redis 过程
2021/06/02 Redis
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
对象析构函数__del__在Python中何时使用
2022/03/22 Python