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 多进程与多线程测试 的相关文章

  • 从 RabbitMQ 迁移到 Amazon SQS [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们的初创公司目前正在使用RabbitMQ with Python Django 对于消息队列 现在我们计划转移到Amazon SQS其高可用性
  • Python daysBetweenDate

    我想我可能有一个无限循环 因为每当我运行代码时 我都会收到一条错误消息 它说 程序因使用 13 CPU 秒而关闭 整个代码 应该以日期作为输入并输出第二天 此代码假设所有月份都是 30 天 除了daysBetweenDates功能正常 其他
  • python 队列获取大小,使用 qsize() 还是 len()?

    我见过这样的例子qsize and len 已用于计算队列的大小 两者有什么区别 对于大多数容器 您需要len but Queue Queue实际上并不支持len 这可能是因为它很旧 或者因为在多线程环境中获取队列的长度并不是特别有用 无论
  • 使用 Pandas 解析时避免 Excel 的科学记数法舍入

    我有一个自动生成的 Excel 文件 其中偶尔包含非常大的数字 例如135061808695 在 Excel 文件中 当您单击单元格时 它会显示完整的数字135061808695然而 在视觉上 使用自动 常规 格式 数字显示为1 35063
  • Boost Python:多态容器?

    我有一个方法 或函数 它返回对多态对象列表的引用 class A class B public A std list
  • OpenCV Python 和 SIFT 功能

    我知道有很多关于Python and OpenCV但我没有找到有关这个特殊主题的帮助 我想提取SIFT关键点来自 python OpenCV 中的图像 我最近安装了 OpenCV 2 3 可以访问 SURF 和 MSER 但不能访问 SIF
  • python subprocess proc.stderr.read() 引入额外的行?

    我想运行一些命令并抓取输出到 stderr 的任何内容 我有两个版本的函数可以执行此操作 版本 1 def Getstatusoutput cmd Return status output of executing cmd in a she
  • 如何将字符串列表转换为正确的 Python 类型?

    给定一个 python 字符串列表 如何自动将它们转换为正确的类型 意思是 如果我有 hello 3 3 64 1 我希望将其转换为列表 hello 3 3 64 1 其中第一个元素是字符串 第二个元素是 int 第三个元素是 float
  • scrapy蜘蛛如何将值返回给另一个蜘蛛

    我正在爬行的网站包含许多玩家 当我点击任何玩家时 我都可以进入他的页面 网站结构是这样的
  • 如何根据python中的文件名检索每个文件的datemodtime?

    我当前的流程涉及循环遍历源目录并将每个文件的名称添加到 python 中的数据帧中 我也想获取每个文件的修改日期 import datetime import os import pandas as pd set src directory
  • 使用 pywin32com 进行 opc 的内存泄漏

    我很难弄清楚如何解决内存泄漏问题 我认为这可能是 pywin32 的问题 但我不完全确定 我用于读取 写入单个项目的代码似乎工作得很好 但是当使用组函数时 它会慢慢泄漏内存 我怀疑这是来自必须在 server handles 中传递的基于
  • 使用 South 更改 Django 模型列默认值

    我在 Django 项目中使用 South 和 Postgresql DB 我想更改一个模型字段的默认值以供继续使用 我不需要以前的记录 刚刚新记录 我是否需要为此进行迁移 或者只是更改模型 旧场详细信息 background style
  • 将 pandas DataFrame 写入 unicode 中的 JSON

    我正在尝试将包含 unicode 的 pandas DataFrame 写入 json 但是内置的 to json函数对字符进行转义 我该如何解决 Example import pandas as pd df pd DataFrame a
  • 在硬件级别模拟按键 - Windows

    我正在寻找一种语言或库 使我能够在最大可能的水平上模拟击键 而无需实际按下按键 我对击键级别的具体衡量标准是 当我的计算机已经运行按键侦听器 例如鼠标键和粘滞键 时 它是否会产生与物理按键相同的输出 我尝试过很多击键模拟的方法 java A
  • 使用不同的 CMD 名称同时运行多个 python 脚本

    我尝试通过 multiprocessing Process 在 test py 中同时调用 a py 和 b py 它起作用了 但过程CMDa py b py 和 test py 的名称相同 均为 usr bin python tmp te
  • 如何在seaborn displot上绘制正态曲线

    distplot 已被弃用 取而代之的是 displot 之前的函数可以选择绘制正态曲线 import seaborn as sns import matplotlib pyplot as plt from scipy import sta
  • Python记录多个模块记录器在主程序之外不起作用

    我的目标是从多个模块进行日志记录 同时仅在一个位置 主程序中 配置记录器 如图所示这个答案 https stackoverflow com questions 15727420 using python logging in multipl
  • Pandas - 过滤器和正则表达式搜索 DataFrame 的索引

    我有一个 DataFrame 其中列是 MultiIndex 索引是名称列表 即index Andrew Bob Calvin 我想创建一个函数来返回数据帧中使用名称 Bob 或以字母 A 开头或以小写字母开头的所有行 如何才能做到这一点
  • Python 和 Visual Studio Code - 如何在编辑器中运行特定文件?

    我正在使用 Visual Studio Code 和 Python 编写一个小型应用程序 我的应用程序有两个文件 Main py and MyCustomClass py Main py是应用程序的入口点 MyCustomClass py包
  • Python FFmpeg查询rtsp太慢

    目前 我正在尝试使用 python 和 FFmpeg 来查询原始格式为 h264 的 rtsp 数据 直播流视频的信息为 fps 29 分辨率 1280 720 我希望我可以以相同的格式 h264 查询数据并将其放入python队列中以便将

随机推荐

  • 记录一次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