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编程中的for循环语句学习教程
Oct 14 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
python 字典中取值的两种方法小结
Aug 02 Python
Django之无名分组和有名分组的实现
Apr 16 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
Python 如何实现数据库表结构同步
Sep 29 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
Python中Permission denied的解决方案
Apr 02 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
php 字符串函数收集
2010/03/29 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
JS模板实现方法
2013/04/03 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
python实现rest请求api示例
2014/04/22 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
pyspark 随机森林的实现
2020/04/24 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
工作个人的自我评价
2014/01/14 职场文书
初级会计求职信范文
2014/02/15 职场文书
医学求职信
2014/05/28 职场文书