Python 标准库 - 并发执行

news2025/2/12 11:46:58

Python 标准库 - 并发执行

  • 1. 简单介绍
  • 2. 程序示例
    • 2.1 threading 编程示例
    • 2.2 multiprocessing 编程示例
    • 2.3 concurrent.futures 编程示例

1. 简单介绍

  Python 标准库 非常庞大,所提供的组件涉及范围十分广泛,官方参考链接https://docs.python.org/zh-cn/3.9/library/index.html。这个库包含了多个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Python 编写的模块,提供了日常编程中许多问题的标准解决方案

  我们通常在 Python 上进行算法开发,因为 Python 编程方便,易于快速验证算法。而在验证算法正确后,如果对运行效率有更高要求的话,则会将计算密集的模块使用 多线程 / 多进程 来执行,来达到代码运行效率加速的效果。所以,这就涉及到了 Python 标准库 - 并发执行。https://docs.python.org/zh-cn/3.9/library/concurrency.html

在这里插入图片描述

2. 程序示例

以下编程示例均为个人根据 Python 标准库 - 并发执行,开展的相关实战代码。

2.1 threading 编程示例

import threading
import queue

g_result = queue.Queue()


# calculate sum from start to end
def do_threading(start, end, thread_id):

    sum_value = 0

    for i in range(start, end):
        sum_value += i

    g_result.put((thread_id, sum_value))


thread_num = 16
thread_pool = []

for task_id in range(thread_num):
    thread_task = threading.Thread(target=do_threading,
                                   args=(task_id * 100, (task_id + 1) * 100, task_id))

    thread_pool.append(thread_task)

for thread_task in thread_pool:
    thread_task.start()

for thread_task in thread_pool:
    thread_task.join()

for task_id in range(thread_num):
    result = g_result.get()
    print("threading no.", result[0], ", result is", result[1])

2.2 multiprocessing 编程示例

import multiprocessing


# calculate sum from start to end
def do_process(start, end):

    sum_value = 0

    for i in range(start, end):
        sum_value += i

    return sum_value


cpu_num = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=cpu_num)
results = []
task_num = 16

for task_id in range(task_num):
    results.append(pool.apply_async(do_process, (task_id * 100, (task_id + 1) * 100)))

pool.close()
pool.join()

for task_id in range(task_num):
    print("process no.", task_id, ", result is", results[task_id].get())

2.3 concurrent.futures 编程示例

import time
import numpy as np
from concurrent.futures import ThreadPoolExecutor


def read_files_thread(files_seq, threads_num=4):
    thread_pool = ThreadPoolExecutor(max_workers=threads_num)

    def read_file(file_path):
        return np.fromfile(file_path, dtype=np.float32)

    files_val_seq = [i for i in thread_pool.map(read_file, files_seq)]
    thread_pool.shutdown()
    return files_val_seq


def read_files(files_seq):

    def read_file(file_path):
        return np.fromfile(file_path, dtype=np.float32)

    files_val_seq = [read_file(i) for i in files_seq]
    return files_val_seq


file_sequence = ['1.bin', '2.bin', '3.bin', '4.bin', '5.bin', '6.bin']


start_time = time.time()

method_1 = read_files_thread(file_sequence, 8)

print("method_1 time consume ", time.time() - start_time)

start_time = time.time()

method_2 = read_files(file_sequence)

print("method_2 time consume ", time.time() - start_time)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【sentinel】令牌桶算法在Sentinel中的应用

令牌桶算法 令牌桶算法介绍 令牌桶算法,又称token bucket。 从图中我们可以看到,令牌桶算法比漏桶算法稍显复杂。首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的,token以…

【深度学习】0-2 深度学习相关数学概念的简单总结-概率与信息论

样本空间 样本空间是一个实验或随机试验所有可能结果的集合,随机试验中的每个可能结果称为样本点。例如投掷一个骰子,那么样本空间就是{1,2,3,4,5,6}。 随机变量 随机变量,顾名思义…

IDEA全局设置JDK、Maven、编码格式

本机已安装JDK版本: 本机已安装Maven版本: 一、IDEA设置全局JDK设置 File---->New Projects Settings---->Structure for New Projects... 先将本地安装的JDK添加到SDK 将项目SDK设置为刚刚添加的本地JDK版本 File---->New Projects Settings-…

Webstorm 加载vue项目时,特别卡顿,完美解决。觉得有用加好友打赏

觉得有用加好友打赏:QQ:854138497 上图cpu直接干满。 根据上图提示,直接 disable hints,或者到下图的settings里面设置。 Code vision取消后,webstorm 明显就不卡了。记得重启webstorm。 还有一种方式,根…

完美解决MacOS关于ld: library not found for -lnetcdff错误

1. 问题描述 在使用Intel版本的Mac编译某个程序时出现了错误,显示如下图。 说明:libnetcdff是netcdf的Fortran的接口,如下ChatGPT解释。 2. 出现的原因 原因是Makefile中定义的静态库链接并没有在系统默认的库路径下找到,默认…

Jmeter HTTP Cookie管理器的使用

目录 前言: 1、在HTTP信息头管理器组件中添加Cookie信息 (1)测试计划内包含的元件 (2)请求取样器内容 (3)HTTP信息头管理器内容 (4)查看结果 2、使用HTTP Cookie管…

你想知道的 MySQL 性能调优方式,都在这里

前言:对于性能测试来说,数据库的监控是尤为的重要,以及对数据库进行调优,用以提升性能,是能在短期内有显著的效果的,本文针对MySQL数据库进行分析如何定位MySQL数据库的性能问题。 关键 MySQL 统计指标 如…

一张软考系统架构设计师证书到底能证明了什么?

软考证书证明你考过了软考高级架构,拥有了评高级职称的资格! 证书的作用还有: 1、以考代评:软考证书可以用来评职称 2、积分落户:可用于积分落户,加相应的分,软考高级职业资格都几乎可以直接…

Tinker 组件修复,踩坑

1、You need to use a Theme.AppCompat theme (or descendant) with this activity. 复现步骤 补丁加载成功之后重启应用,再退出应用重进闪退 日志 TinkerUncaughtHandler catch exception:java.lang.IllegalStateException: You need to use a Theme.AppCompat th…

Cesium教程(十七):淹没分析

Cesium教程(十七):淹没分析 1、什么是淹没分析 淹没分析是根据某片区域的地形及洪水流量速度,动态模拟该地形区域水位逐渐上涨的淹没过程。该功能可适用于山区、丘陵等地形起伏较大区域,模拟洪水涨到安全限定高度的淹没过程,为防洪水救灾提供一定的参考。此外,还可以为河…

红帽认证常见答疑(二):电脑配置、实验环境和考试环境、可以自学吗

学习红帽需要配置什么样的电脑? RHCE推荐学员自己的电脑内存在16G左右,RHCA推荐学员电脑内存在32-64G,且最好配置128G以上的固态硬盘,如果自己没有该配置的电脑,誉天可以提供远程学习环境,可以随时随地连接…

Java中常用的工具类——字符串类

提示:字符串类是编程中最常用的一种数据类型,比较重要❗ 文章目录 前言一、字符串类创建对象方式静态创建动态创建 二、String字符串内容不可改变三、字符串常用方法length方法charAt方法substring方法indexOf与lastIndexOfindexOf方法lastIndexOf方法 替…

企业即时通信软件有哪些?要如何选择?

随着企业数字化转型的加速,即时通信软件已成为企业日常沟通的重要工具。但是市面上的企业即时通信软件种类繁多,如何选择适合自己企业的即时通信软件呢?本文将为大家介绍几款常用的企业即时通信软件以及如何选择。 企业微信 企业微信是腾讯公…

牛逼!Windows竟然也能运行QEMU虚拟机!

这些天研究 Miracast,又倒腾了开发用的虚拟机,但是发现了新的东西就是 QEMU ——全宇宙最强的硬件模拟器,原来这玩意可以在Windows上跑虚拟机的。 环境部署 msys2mingw-w64-qemu系统isoHyper-V 代替 KVM/Linux 安装 在 Msys2 Repo下载exe…

【服务器数据恢复】RAID5重建导致数据丢失的数据恢复案例

服务器数据恢复环境: HP某型号服务器,5块硬盘组建了一组raid5磁盘阵列。 服务器故障&分析: 服务器在工作过程中,raid5磁盘阵列中的一块磁盘掉线,由于raid5的容错特点,raid阵列未受影响,工作…

弥合风险缺口 筑牢共享安全|2023开放原子全球开源峰会开源安全技术与实践分论坛成功举办

6 月 12 日,2023 开放原子全球开源峰会开源安全技术与实践分论坛成功举办。本场论坛围绕开源软件供应链、开源漏洞信息共享机制、开源安全测试工具、人工智能新技术对开源安全领域的影响等方向分享了技术和最佳实践,讨论了开源安全领域最新产业动态。 开…

认知升维: 道、法、术、器、势

身处在严重内卷的时代,我们各方面面临转型调整,提升认知,更好适应说变就变|比翻书变脸还快的节奏,需要自身不断精进,不断挑战自我,这个世界上:一切都在变,唯独不变的是变化本身&…

enscape3.5新版本更新,神仙功能还不少

Enscape于2015年首次发布,已成为建筑可视化市场的关键工具之一,在上一次CGarchitect渲染调查中名列前十。 图片来源于CGarchitect渲染调查报告 相对于同行的其他渲染器,Enscape最大的优势在于它并未因为其易于使用特性而降低了品质&#xff…

一篇文章搞定《CoordinatorLayout完成电商首页》

一篇文章搞定《CoordinatorLayout完成电商首页》 前言NestedScrollNestedScrollingParentNestedScrollingChildNestedScrollingChildHelper 和 NestedScrollingParentHelper CoordinatorLayoutCoordinatorLayout知识点讲解实现后续功能 通过自定义Behavior实现Fling效果认识Beh…

操作系统课程设计 模拟FAT文件系统的设计与实现

一、 目的与要求 1.研究FAT文件系统的物理布局。 2.掌握FAT文件系统中目录的结构与目录项定义。 3.掌握文件操作如建立目录,建立文件,删除文件,复制文件时,对FAT和目录的操作步骤。 4.合理设计文件系统布局与数据结构&#xff08…