Ubuntu18环境下 python 多进程与多线程测试

2023-11-18

测试说明

测试的对象为多次求平方的程序。

def task_powers(limit: int) -> float:
    """return powers of arrays from 1 to limit

    Args:
        limit (int): max num

    Returns:
        float: list of powers
    """
    return [x**2 for x in range(limit)]

单一线程单一进程测试函数

def test_normal(test_func: FunctionType) -> None:
    """ test TEST_TIMES times test_func with args = (TASK_PARAM)

    Args:
        test_func (FunctionType): test function
    """
    # 测试多次运行时间
    time_s = time.time()
    for i in range(TEST_TIMES):
        task_powers(TASK_PARAM)
    time_e = time.time()
    time_used = time_e - time_s
    print("Total time used with normal type: \t", time_used)

多线程下测试函数

def test_multiThreading(test_func: FunctionType) -> None:
    """ test TEST_TIMES times test_func with args = TASK_PARAM by multithrading

    Args:
        test_func (FunctionType): _description_
    """
    # 测试多次运行时间
    time_s = time.time()
    ts = []
    for i in range(TEST_TIMES):
        ts.append(Thread(target=test_func, args=(TASK_PARAM,)))
        ts[i].start()
    for i in range(TEST_TIMES):
        ts[i].join()
    time_e = time.time()
    time_used = time_e - time_s
    print("Total time used with multithrading type: \t", time_used)

多进程下测试函数

def test_multiProposing(test_func: FunctionType) -> None:
    """ test TEST_TIMES times test_func with args = TASK_PARAM by multiprocessing

    Args:
        test_func (FunctionType): test function
    """
    # 测试多次运行时间
    time_s = time.time()
    ts = []
    for i in range(TEST_TIMES):
        ts.append(Process(target=test_func, args=(TASK_PARAM,)))
        ts[i].start()
    for i in range(TEST_TIMES):
        ts[i].join()
    time_e = time.time()
    time_used = time_e - time_s
    print("Total time used with multiprocessing type: \t", time_used)

主函数与测试结果

TASK_FUNC = task_powers
TASK_PARAM = 5000000   # 测试用函数的参数
TEST_TIMES = 8
if __name__ == '__main__':
    test_normal(TASK_FUNC)            # test normal
    test_multiThreading(TASK_FUNC)    # test multithrading
    test_multiProposing(TASK_FUNC)    # test multiprocessing

查看程序输出:

Total time used with normal type:                          9.709944009780884
Total time used with multithrading type:            9.602959871292114
Total time used with multiprocessing type:       1.7592921257019043

打开Ubuntu的系统监视器看各个CPU与内存的使用情况:
测试结果
可以发现,单一进程单一线程的情况下会把CPU单核落满;多线程情况下会把多个核心都调度起来,但每个核心的利用率不高,平均每个核心利用率都在12.5%(本次测试开了8个线程,也就是说多个核心加起来的利用率约等于拉满一个核心的效果);最后多进程程序运行时几乎所有核心都拉满了利用率,程序运行速度大幅下降,但并不是只有单进程的1/8,推测多进程设置与调度花费了一定时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18环境下 python 多进程与多线程测试 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 记录一次rabbitmq ConfirmCallback不生效的问题

    记录一次rabbitmq回调函数不生效的问题 application yml里是否存在 springboot版本的问题 改为2 1 7 RELEASE即可 以上都未生效的话 检查一下是否自己写了连接rabbitmq的bean 在里面加上下面
  • Unity 3D中的帧动画播放

    帧动画 Frame By Frame 的原理 链接 项目实例资源 关键是连续的关键帧分解动作 也就是在时间轴的每帧上逐帧绘制不同的内容 使其连续播放而成动画 虽然每一帧都不一样 处理的信息量大 但是 帧动画具有非常大的灵活性 几乎可以表现任
  • C/C++之内存四区

    程序运行时 将内存大致分为四个区域 代码区 存放函数体的二进制代码 由操作系统进行管理的 全局区 存放 全局变量和 静态变量以及 常量 栈区 由编译器自动分配释放 存放函数的参数值 局部变量等 堆区 由程序员分配和释放 若程序员不释放 程序
  • numpy——mgrid

    x1 x2 np mgrid x1min x1max num1j x2min x2max num2j x1返回的是x1min到x1max间均匀分成num1个数 进行横向扩展为方阵 x2返回的是x2min到x2max间均匀分成num2个数 进
  • 企业级数据单表全量增量抽取数据模型(Kettle版)

    最近在使用Kettle进行ETL的工作 现在总结一下 需求是将MYSQL中的表数据增量备份到HIVE仓库中 第一次是全量 我只想给大伙来点实用的 避免大家踩坑 Kettle是一个基于图形化的ETL工具 也可以用于集成各种作业 比如Sqoop
  • Spring Boot之自定义JSON转换器

    JSON是前后端数据交互最流行的格式 在目前的项目开发中 常见的JSON的转换器有三种 json lib由于自身的缺陷基本不用 最广泛的还是Jackson Jackson 在springboot中默认添加了jackson databind作
  • 使用go语言整合gin,驱动bartender打印标签程序

    可以用来当中间件 项目地址 github GitHub wjdsg0327 printer barTender 使用go语言整合gin驱动bartender打印标签 gitee printer barTender 使用go整合gin驱动ba
  • [kubernetes]step3-kubeadm更新证书有效期

    kubeadm更新kubernetes集群证书 接着上面阿里云上的kubernetes集群 一步步搭建服务 因为kubernetes要上云测试了 不想到时候突然因为证书导致服务挂掉 挨批 就把证书更新一下 感觉10年差不多了 查看证书过期时
  • Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore

    Java并发编程 CountDownLatch CyclicBarrier和 Semaphore 2016 10 07 分类 基础技术 7 条评论 标签 并发 分享到 0 原文出处 海子 在java 1 5中 提供了一些非常有用的辅助类来帮
  • linux源码安装git 教程 ,设置远程库,客户端访问完整版

    1 linux 在 github 下载 git 安装包 然后解压 wget https github com git git archive v2 21 0 tar gz tar zxvf git v2 21 0 tar gz 2 安装gi
  • C++的文件操作open与close

    先看一下相应的打开文件的不同参数的作用 C open 打开文件 含打开模式一览表 打开模式可以用多个 但符号是 不是 注意啦 比如 ios in ios binary表示用二进制模式 以读取的方式打开文件 ios out ios binar
  • 3. 类指针与智能指针

    3 类指针与智能指针 本篇主要解答以下问题 类的对象与类指针的区别 为什么要用智能指针 unique ptr 和 shared ptr 3 1 类对象与类指针 实例化一个类的时候 有两种方式 一是创建对象 二是创建指针 以2 1中的stud
  • 页表长度和页表大小_OS——关于页面大小与页表项的问题

    一 采用分页管理方式时 操作系统将进程划分成若干个页面 将内存划分为若干个内存块 or页 页面和内存块大小一致并且一一对应 但是由于进程划分页面时 最后一个页面大小可能小于内存块大小 导致存放的最后一个内存块存在内部碎片 成为页内碎片 为了
  • 数据库中视图、索引、存储过程的作用

    视图可以被看成是虚拟表或存储查询 可通过视图访问的数据不作为独特的对象存储在数据库内 数据库内存储的是 SELECT 语句 SELECT 语句的结果集构成视图所返回的虚拟表 用户可以用引用表时所使用的方法 在 Transact SQL 语句
  • 内置对象Session与HttpSession是同一个东西吗?

    本质上是 在jsp中session是个内置对象 而在servlet中想使用session就要先得到session 方法如下 HttpSession session request getSession 在jsp中或是在servlet中ses
  • 原动力×云原生正发声 降本增效大讲堂

    原动力 云原生正发声 降本增效大讲堂课程活动链接 原动力 云原生正发声 降本增效大讲堂 提升IT资源利用率 实现降本增效 已经成为企业关注重点 2021 年 CNCF FinOps Kubernetes Report 指出 迁移至 Kube
  • c++ 模板的具体化与实例化

    函数模板是C 新增的一种性质 它允许只定义一次函数的实现 即可使用不同类型的参数来调用该函数 这样做可以减小代码的书写的复杂度 同时也便于修改 注 使用模板函数并不会减少最终可执行程序的大小 因为在调用模板函数时 编译器都根据调用时的参数类
  • Unity3d 简单的按照路径移动物体!

    在TORQUE引擎中 我们只要设置几个点 然后物体会按照这几个点顺序移动 Unity3d也可以的 现在介绍一个很简单的按照路径移动的方法 目标是让蓝色方块沿着紫色方块组成的路径移动 设计思想就是让蓝色方块移动第一个 然后继续移动到第二个 然
  • 室内探索无人机,解决复杂环境下的任务挑战!

    前言 室内探索无人机是一种专为在室内环境中进行任务的无人机系统 相比传统的人员部署 室内探索无人机具有更高的灵活性和机动性 能够在复杂的室内环境中执行任务 用于未知环境的探索和特定目标的搜索 为完成无人机室内搜索与识别等复杂任务 阿木实验室
  • Ubuntu18环境下 python 多进程与多线程测试

    Ubuntu18环境下 python 多进程与多线程测试 测试说明 单一线程单一进程测试函数 多线程下测试函数 多进程下测试函数 主函数与测试结果 测试说明 测试的对象为多次求平方的程序 def task powers limit int