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

yizhihongxing

下面我为你详细讲解“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日

相关文章

  • 保姆级官方yolov7训练自己的数据集及项目部署详解

    保姆级官方YOLOv7训练自己的数据集及项目部署详解 1. 前置条件 在开始使用官方YOLOv7训练自己的数据集之前,需要先安装以下软件和库: Anaconda或Miniconda PyTorch CUDA(如果需要GPU加速) 同时,还需要一些基本编程知识,如Python语言基础、深度学习算法基础等。 2. 下载官方YOLOv7代码 在终端中使用以下代码将…

    python 2023年6月3日
    00
  • 如何用Python一次性下载抖音上音乐

    如何用Python一次性下载抖音上音乐 在本攻略中,我们将介绍如何使用Python一次性下载抖音上的音乐,并提供两个示例。 步骤1:获取音乐的下载链接 在使用Python一次性下载抖音上的音乐之前,我们需要获取音乐的下载链接。我们可以使用Python的requests库获取音乐的下载链接,并使用Python的json库解析响应数据。 以下是示例,用于获取音乐…

    python 2023年5月15日
    00
  • Python图片处理之图片采样处理详解

    对于Python图片处理之图片采样处理,我将为您提供以下完整攻略。 简介 在许多计算机视觉中,图像采样通常是将给定的一张高分辨率图像转换为一张低分辨率图像的过程。这样的过程可以在某些情况下显著减少计算复杂度,并允许在较小的存储空间中存储图像。 在Python中,我们可以使用许多开源库来实现图像采样。本文将介绍如何使用Python中的openslide、ope…

    python 2023年5月18日
    00
  • Python基础第三方模块requests openpyxl

    Python基础第三方模块requests和openpyxl requests模块 requests是Python中用于简化HTTP请求的常用库,支持HTTP/1.1和HTTPS,并且具有动态属性表现形式,可以方便地处理GET、POST等HTTP请求。 安装方法 使用pip install requests指令即可完成requests的安装。 request…

    python 2023年5月13日
    00
  • 用Python给图像算法做个简单应用界面

    下面是详细讲解“用Python给图像算法做个简单应用界面”的完整攻略,包含两个示例说明。 应用界面的作用 应用界面是一种非常有用的工具,可以帮助用户更方便地使用图像算法。应用界面可以提供以下功能: 显示图像 提供算法选项 显示算法结果 保存算法结果 应用界面可以使用户更轻松地使用图像算法,而不需要编写代码或使用命令行界面。 Python实现应用界面 Pyth…

    python 2023年5月14日
    00
  • 使用科大讯飞语音SDK实现文字在线合成语音

    使用科大讯飞语音SDK实现文字在线合成语音需要进行以下步骤: 步骤1:注册和申请应用 首先,前往科大讯飞官网(http://www.xfyun.cn/)进行注册,并创建应用,获取AppID。 步骤2:下载SDK 下载语音合成SDK,SDK支持Windows、Linux、Android平台,具体的下载方式可参考官网:http://www.xfyun.cn/se…

    python 2023年5月19日
    00
  • Python常用数据类型之间的转换总结

    当我们在Python中进行编程时,常常需要将一个数据类型转换为另一个数据类型。Python提供了多种数据类型之间的转换方法,包括int()、float()、str()、list()、tuple()和dict()等。以下是Python常用数据类型之间的转换总结。 int()函数 int()用于将其他数据类型转换为整数类型。以下是一个示例,演示如何使用int()…

    python 2023年5月13日
    00
  • Python函数中的不定长参数相关知识总结

    下面是关于“Python函数中的不定长参数相关知识总结”的完整攻略: 1.什么是不定长参数 在Python中,有时候函数的参数个数是不确定的,这就需要我们使用不定长参数。不定长参数包括两种:可变参数和关键字参数。 可变参数是指传入的参数个数是不确定的,可变参数在函数内部自动组装为元组(tuple)类型。 关键字参数是指传入的参数个数也是不确定的,但是和普通参…

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