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中字典的键的使用
Aug 19 Python
python实现图片识别汽车功能
Nov 30 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python实现一个优先级队列的方法
Jul 31 Python
Python打印不合法的文件名
Jul 31 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中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
php中使用websocket详解
2016/09/23 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
关于反爬虫的一些简单总结
2017/12/13 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
HTML5之语义标签介绍
2016/07/07 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
先进工作者获奖感言
2014/02/08 职场文书
任命书标准格式
2015/03/02 职场文书
二审答辩状范文
2015/05/22 职场文书
可可西里观后感
2015/06/08 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android