python 多线程与多进程效率测试

下面我为你详细讲解“python多线程与多进程效率测试”的完整攻略。

一、多线程与多进程概述

  • 多线程:是在一个进程的内存空间内创建多个线程同时执行不同的任务,共享进程的资源,可以提高计算机性能。
  • 多进程:是在操作系统中同时运行多个进程,每个进程有独立的内存空间,相互独立运行,可以取得更好的计算机性能。

二、多线程与多进程的对比

  • 多线程:线程之间共享内存,相对于多进程需要更少的资源,创建速度快,上下文切换速度慢,适合IO密集型任务。
  • 多进程:多个进程相互独立,创建速度慢,但上下文切换速度快,适合CPU密集型任务。

三、多线程与多进程的效率测试

  • 效率测试的代码实现可以从下面的Github仓库中获取:
    > https://github.com/wuxudong/python_multiprocessing_demo

  • 针对CPU密集型任务的效率测试示例:

from multiprocessing import Pool
import time

def single(n):
    sum = 0
    for i in range(n):
        sum += i
    return sum

def multi(n, tasks=4):
    pool = Pool(processes=tasks)
    result = pool.starmap(single, [(n//tasks,)]*tasks)
    return sum(result)

if __name__ == "__main__":
    n = 1000000000
    start_time = time.time()
    result1 = single(n)
    end_time1 = time.time()
    result2 = multi(n)
    end_time2 = time.time()
    print("single result: {}, time cost: {}".format(result1, end_time1-start_time))
    print("multi result: {}, time cost: {}".format(result2, end_time2-end_time1))

在上面的代码中,我们定义了一个计算从0到n之间所有数的和的函数single,我们分别用singlemulti函数计算从0到1000000000之间所有的数之和。通过多进程Pool的方式创建多个进程,使用starmap方法来实现对多个进程同时调用single函数的操作。代码运行结果如下:

single result: 499999999500000000, time cost: 18.24348211288452
multi result: 499999999500000000, time cost: 9.056660652160645

我们可以发现,使用多进程的方式,效率提升了一倍。

  • 针对IO密集型任务的效率测试示例:
import time
import requests
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def download(url):
    resp = requests.get(url)
    return resp.status_code

def single_thread(urls):
    for url in urls:
        download(url)

def multi_thread(urls, tasks=4):
    with ThreadPoolExecutor(max_workers=tasks) as exe:
        exe.map(download, urls)

def multi_process(urls, tasks=4):
    with ProcessPoolExecutor(max_workers=tasks) as exe:
        exe.map(download, urls)

if __name__ == "__main__":
    urls = ["https://www.baidu.com", "https://www.taobao.com", "https://www.jd.com"]
    start_time1 = time.time()
    single_thread(urls)
    end_time1 = time.time()

    start_time2 = time.time()
    multi_thread(urls)
    end_time2 = time.time()

    start_time3 = time.time()
    multi_process(urls)
    end_time3 = time.time()

    print("single thread cost time: %s" % (end_time1 - start_time1))
    print("multi thread cost time: %s" % (end_time2 - start_time2))
    print("multi process cost time: %s" % (end_time3 - start_time3))

在上面的代码中,我们定义了一个下载网页内容的download函数,并用single_threadmulti_threadmulti_process三种方式分别实现将三个网页的内容下载下来的操作。通过使用ThreadPoolExecutorProcessPoolExecutor类创建多线程和多进程,使用map方法实现对多个线程和进程同时调用download函数的操作。代码运行结果如下:

single thread cost time: 2.5266950130462646
multi thread cost time: 0.9717590808868408
multi process cost time: 1.697864055633545

我们可以发现,对于IO密集型任务,使用多线程的方式效率最高,而多进程的效率表现稍次。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 多线程与多进程效率测试 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • python实现音乐播放和下载小程序功能

    Python实现音乐播放和下载小程序功能 本攻略将在Python环境下,使用第三方库实现音乐播放和下载的功能。主要依赖的库包括: pygame:用于播放音乐 requests:用于下载音乐 下面将分为两部分,分别介绍音乐播放和下载的实现方法。 音乐播放 安装pygame 可以通过pip安装pygame,运行以下命令即可: pip install pygame…

    python 2023年5月23日
    00
  • Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)

    Python程序报错崩溃后如何倒回到崩溃的位置(推荐)攻略 在Python中,当程序出现错误时,程序会崩溃并停止执行。如果我们想要倒回到崩溃的位置,我们可以使用Python的调试工具来实现。本攻略将介绍如何使用Python程序报错崩溃后如何倒回到崩溃的位置,并提供两个示例。 解决方法 在Python中解决程序报错崩溃后如何倒回到崩溃的位置,我们可以尝试以下方…

    python 2023年5月13日
    00
  • 基于python分析你的上网行为 看看你平时上网都在干嘛

    基于Python分析你的上网行为可以帮助你了解自己平时上网的习惯和行为,以便更好地管理自己的时间和提高工作效率。以下是基于Python分析你的上网行为的一些攻略: 1. 使用浏览器历史记录分析上网行为 浏览器历史记录是记录用户在浏览器中访问过的网站的记录。可以使用Python读取浏览器历史记录文件,分析用户的上网行为。 以下是一个示例,演示如何使用Pytho…

    python 2023年5月15日
    00
  • 浅析Python pandas模块输出每行中间省略号问题

    在这里我将为你详细讲解如何解决Python pandas模块输出每行中间出现省略号的问题。首先需要了解这个问题的产生原因,当控制台或输出文件的宽度不足以容纳完整一行时,pandas会自动使用省略号来表示省略的部分。 解决这个问题的方法主要有两种: 方法一:更改控制台或输出文件的宽度 方案:可以修改控制台或输出文件的宽度,使其能够容纳整行数据: import …

    python 2023年5月20日
    00
  • Python3.5面向对象编程图文与实例详解

    下面我来为您详细讲解“Python3.5面向对象编程图文与实例详解”的完整攻略。 什么是面向对象编程 面向对象编程(Object Oriented Programming,简称 OOP)是一种程序设计思想,它将程序中的实体(称为对象)视为相互作用的个体,通过定义类和对象来实现对实体的描述和处理。在 Python 中,对象可以是一些数据,也可以是一些方法,而类…

    python 2023年5月30日
    00
  • pycharm 配置svn的图文教程(手把手教你)

    下面就是针对这个主题的完整攻略。 1.安装SVN客户端(TortoiseSVN) TortoiseSVN是一个免费开源的Subversion客户端,可以在Windows操作系统上使用。我们可以前往 TortoiseSVN官方网站 下载安装包,根据指示进行安装即可。 2.配置SVN和PyCharm 步骤如下: 1.打开PyCharm,单击菜单栏中的“File”…

    python 2023年6月3日
    00
  • 10分钟教你用Python实现微信自动回复功能

    10分钟教你用Python实现微信自动回复功能 前言 微信是国内最流行的即时通讯软件之一,很多人都离不开微信,同时也会遇到不方便回复的情况,比如正在开会、开车、在洗澡等不能即时回复消息的情况。那么有没有一种方法可以让你在这些情况下自动回复消息?答案是肯定的,通过Python代码实现微信自动回复功能,解放你的双手,提高你的效率。 步骤 步骤一:安装itchat…

    python 2023年5月19日
    00
  • pycharm部署django项目到云服务器的详细流程

    下面是“pycharm部署django项目到云服务器的详细流程”的完整攻略: 准备工作 云服务器:你需要一个云服务器,具体可以选择阿里云、腾讯云等云服务商。并且在云服务器上开启相应的端口,例如80端口,用于访问网页。 pycharm:推荐使用最新版的pycharm实现部署。 django项目:已经开发完成的django项目,并且可以在本地没有问题地运行。 部…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部