当前位置: 首页 > news >正文

一文详解Python中多进程和进程池的使用方法

这篇文章将介绍Python中多进程和进程池的使用方法,并提供一些实用的案例供大家参考,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

目录

Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多进程和进程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本篇博客将介绍Python中多进程和进程池的使用方法,并提供一些实用的案例供读者参考。

一、多进程

多进程是指在同一计算机上,有多个进程同时执行不同的任务。Python中的多进程是通过multiprocessing模块来实现的。下面是一个简单的多进程示例:

1

2

3

4

5

6

7

8

9

import multiprocessing

def task(num):

    print('Task %d is running.' % num)

if __name__ == '__main__':

    for i in range(5):

        p = multiprocessing.Process(target=task, args=(i,))

        p.start()

上述代码中,我们定义了一个task函数,它接受一个参数num,用于标识任务。在主程序中,我们创建了5个进程,每个进程都执行task函数,并传入不同的参数。通过start()方法启动进程。运行上述代码,可以看到输出结果类似于下面这样:

Task 0 is running.
Task 1 is running.
Task 2 is running.
Task 3 is running.
Task 4 is running.

由于多进程是并发执行的,因此输出结果的顺序可能会有所不同。

二、进程池

进程池是一种管理多进程的机制,它可以预先创建一定数量的进程,并将任务分配给这些进程执行。Python中的进程池是通过ProcessPoolExecutor类来实现的。下面是一个简单的进程池示例:

1

2

3

4

5

6

7

8

9

import concurrent.futures

def task(num):

    print('Task %d is running.' % num)

if __name__ == '__main__':

    with concurrent.futures.ProcessPoolExecutor(max_workers=3) as executor:

        for i in range(5):

            executor.submit(task, i)

上述代码中,我们使用了with语句创建了一个ProcessPoolExecutor对象,其中max_workers参数指定了进程池中最大的进程数量。在主程序中,我们创建了5个任务,每个任务都通过executor.submit()方法提交给进程池执行。运行上述代码,可以看到输出结果类似于下面这样:

Task 0 is running.
Task 1 is running.
Task 2 is running.
Task 3 is running.
Task 4 is running.

由于进程池中最大的进程数量为3,因此只有3个任务可以同时执行,其他任务需要等待进程池中的进程空闲后再执行。

三、使用案例

下面是一个实际的案例,展示了如何使用多进程和进程池来加速数据处理过程。假设我们有一个包含1000个元素的列表,需要对每个元素进行某种运算,并将结果保存到另一个列表中。我们可以使用单进程的方式来实现:

1

2

3

4

5

6

7

8

9

10

def process(data):

    result = []

    for item in data:

        result.append(item * 2)

    return result

if __name__ == '__main__':

    data = list(range(1000))

    result = process(data)

    print(result)

上述代码中,我们定义了一个process函数,它接受一个列表作为参数,对列表中的每个元素进行运算,并将结果保存到另一个列表中。在主程序中,我们创建了一个包含1000个元素的列表,并将其传递给process函数。运行上述代码,可以看到输出结果类似于下面这样:

[0, 2, 4, 6, 8, ..., 1996, 1998]

由于这是单进程的方式,因此处理1000个元素的时间可能会比较长。我们可以通过多进程和进程池来加速这个过程:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import concurrent.futures

def process_chunk(chunk):

    result = []

    for item in chunk:

        result.append(item * 2)

    return result

def process(data):

    result = []

    chunk_size = 100

    chunks = [data[i:i+chunk_size] for i in range(0, len(data), chunk_size)]

    with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor:

        futures = [executor.submit(process_chunk, chunk) for chunk in chunks]

        for future in concurrent.futures.as_completed(futures):

            result += future.result()

    return result

if __name__ == '__main__':

    data = list(range(1000))

    result = process(data)

    print(result)

上述代码中,我们首先将原始列表按照一定大小(这里是100)进行分块,然后将每个块提交给进程池中的进程执行。最后,我们使用concurrent.futures.as_completed()方法等待所有进程执行完毕,并将它们的结果合并到一个列表中。运行上述代码,可以看到输出结果与之前相同,但是处理时间可能会缩短很多。

总结

本篇博客介绍了Python中多进程和进程池的使用方法,并提供了一些实用的案例供读者参考。多进程和进程池是Python中强大的功能之一,可以帮助我们更加高效地利用CPU资源,提高程序的运行速度。在实际应用中,需要根据具体情况选择合适的方案来实现多进程和进程池。

                          

相关文章:

一文详解Python中多进程和进程池的使用方法

这篇文章将介绍Python中多进程和进程池的使用方法,并提供一些实用的案例供大家参考,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下 目录 Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。…...

前端部署发布项目后,如何通知用户刷新页面、清除缓存

以下只是一些思路,有更好的实现方式可以留言一起交流学习 方式一:纯前端 在每次发布前端时,使用webpack构建命令生成一个json文件,json中写个随机生成的一个字符串(比如时间戳),每次打包程序都…...

项目上线|慕尚集团携手盖雅工场,用数字化推动人效持续提升

过去十年,中国零售业以前所未有的速度被颠覆、被重塑,数字化则是其中重要的推动要素。 随着数字化转型的深入,零售企业的数字化不再局限于布局线上渠道,且更关乎其背后企业核心运营能力的全链路数字化改造。而贯穿于运营全链路的…...

Java重载 与封装、继承

方法重载 在同一个类中,出现了方法名相同,参数不同的方法时 ,我们叫方法重载 作用:根据不同参数,选择不同方法 实例 public static void main(String[] args){public int add(int a,int b){return ab;}public double…...

sed正则表达式替换字符方法

在 Linux 命令行中&#xff0c;可以使用 sed 命令来替换指定文件中的指定字符。具体方法如下&#xff1a; sed -i s/<old_string>/<new_string>/g <filename>其中&#xff0c;<old_string> 表示要被替换的字符串&#xff0c;<new_string> 表示替…...

不讲废话普通人了解 ChatGPT——基础篇第一课

wx供重浩&#xff1a;创享日记 获取更多内容 文章目录 前言什么是 ChatGPT它是如何工作的ChatGPT 和其它机器人有什么不同 前言 不知道大家在第一次会使用 ChatGPT 并尝试和他对话时有没有感到震惊。当ChatGPT首次推出时&#xff0c;我立即被它的功能所吸引。 曾经在遇到繁杂…...

MATLAB计算气象干旱指标:SAPEI

MATLAB计算干旱指标:SAPEI 标准化前降水蒸散发指数(Standardized Antecedent Precipitation Evapotranspiration Index, SAPEI)1 指数简介1.1 指数计算原理步骤1:计算潜在蒸散发(potential evapotranspiration, PET)步骤2:计算降水和PET的日差1.2 数据资料1.3 拟合分布的…...

GPT对SaaS领域有什么影响?

GPT火了&#xff0c;Chat GPT真的火了。 突然之间&#xff0c;所有人都在讨论AI&#xff0c;最初的访客是程序员、工程师、AI从业者&#xff0c;从早高峰写字楼电梯里讨论声&#xff0c;到村里大爷们的饭后谈资&#xff0c;路过的狗子都要和它讨论两句GPT的程度。 革命的前夜…...

backward()和zero_grad()在PyTorch中代表什么意思

文章目录 问&#xff1a;backward()和zero_grad()是什么意思&#xff1f;backward()zero_grad() 问&#xff1a;求导和梯度什么关系问&#xff1a;backward不是求导吗&#xff0c;和梯度有什么关系&#xff08;哈哈哈哈&#xff09;问&#xff1a;你可以举一个简单的例子吗问&a…...

C++多线程编程(一) thread类初窥

多线程编程使我们的程序能够同时执行多项任务。 在C11以前&#xff0c;C没有标准的多线程库&#xff0c;只能使用C语言中的pthread&#xff0c;在C11之后&#xff0c;C标准库中增加了thread类用于多线程编程。thread类其实是对pthread的封装&#xff0c;不过更加好用&#xff…...

Qt QVector 详解:从底层原理到高级用法

目录标题 引言&#xff1a;QVector的重要性与简介QVector的常用接口QVector和std::Vector迭代器&#xff1a;遍历QVector 中的元素&#xff08;Iterators: Traversing Elements in QVector&#xff09;常规索引遍历基于范围的for循环&#xff08;C11及以上&#xff09;使用STL样…...

快速弄懂RPC

快速弄懂RPC 常见的远程通信方式远程调用RPC协议RPC的运用场景和优势 常见的远程通信方式 基于REST架构的HTTP协议以及基于RPC协议的RPC框架。 远程调用 是指跨进程的功能调用。 跨进程可以理解为一个计算机节点的多个进程或者多个计算机节点的多个进程。 RPC协议 远程过…...

ONVIF协议介绍

目录标题 一、 ONVIF协议简介&#xff08;Introduction to ONVIF Protocol&#xff09;1.1 ONVIF的发展历程&#xff08;The Evolution of ONVIF&#xff09;1.2 ONVIF的主要作用与优势&#xff08;The Main Functions and Advantages of ONVIF&#xff09; 二、 ONVIF协议的底…...

AI大模型内卷加剧,商汤凭什么卷进来

2023年&#xff0c;国内大模型何其多。 目前&#xff0c;已宣布推出或即将推出大模型的国内企业多达20余家&#xff0c;基本上能想到的相关企业都已入局。其中&#xff0c;既有资金雄厚的BAT、华为、字节等大厂&#xff0c;也有王慧文、王小川、周伯文等互联网大佬领衔的初创企…...

企业网络安全漏洞分析及其解决_kaic

摘要 为了防范网络安全事故的发生,互联网的每个计算机用户、特别是企业网络用户&#xff0c;必须采取足够的安全防护措施&#xff0c;甚至可以说在利益均衡的情况下不惜一切代价。事实上&#xff0c;许多互联网用户、网管及企业老总都知道网络安全的要性&#xff0c;却不知道网…...

Docker网络模式与cgroups资源控制

目录 1.docker网络模式原理 2.端口映射 3.Docker网络模式&#xff08;41种&#xff09; 1.查看docker网络列表 2.网络模式详解 4.Docker cgroups资源控制 1.CPU资源控制 2.对内存使用的限制 3.对磁盘IO的配置控制&#xff08;blkio&#xff09;的限制 4.清除docker占用…...

Linux/C++:基于TCP协议实现网络版本计算器(自定义应用层协议)

目录 Sock.hpp TcpServer.hpp Protocol.hpp CalServer.cc CalClient.cc 分析 因为&#xff0c;TCP面向字节流&#xff0c;所以TCP有粘包问题&#xff0c;故我们需要应用层协议来区分每一个数据包。防止读取到半个&#xff0c;一个半数据包的情况。 Sock.hpp #pragma on…...

并发之阻塞队列

阻塞队列 使用背景作用从阻塞队列中获取元素常用的三个方法往阻塞队列中存放元素的三种方式 使用背景 想要在多个线程之间传递数据&#xff0c;用一般的对象是不行的&#xff0c;比如我们常用的ArrayList和HashMap都不适合由多个线程同时操作&#xff0c;可能会造成数据丢失或…...

nodejs+vue 智能餐厅菜品厨位分配管理系统

系统功能主要介绍以下几点&#xff1a; 本智能餐厅管理系统主要包括三大功能模块&#xff0c;即用户功能模块和管理员功能模块、厨房功能模块。 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员功能来…...

MySQL NULL 值

NULL 值是遗漏的未知数据&#xff0c;默认地&#xff0c;表的列可以存放 NULL 值。 本章讲解 IS NULL 和 IS NOT NULL 操作符。 如果表中的某个列是可选的&#xff0c;那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。 N…...

探索Mod Assistant:Beat Saber模组管理工具的高效解决方案

探索Mod Assistant&#xff1a;Beat Saber模组管理工具的高效解决方案 【免费下载链接】ModAssistant Simple Beat Saber Mod Installer 项目地址: https://gitcode.com/gh_mirrors/mo/ModAssistant Beat Saber模组管理工具Mod Assistant是一款专为PC版Beat Saber设计的…...

五分钟完成python脚本配置直连taotoken多模型服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 五分钟完成 Python 脚本配置直连 Taotoken 多模型服务 基础教程类&#xff0c;面向刚接触 Taotoken 的 Python 开发者&#xff0c;…...

LabVIEW数据记录编程:生产者-消费者模式与TDMS文件实战

1. 项目概述&#xff1a;为什么数据记录是自动化测试的“定海神针”干了这么多年自动化测试和工业测控&#xff0c;我越来越觉得&#xff0c;一个系统稳不稳&#xff0c;关键看它的数据记录环节扎不扎实。你可能花了大把时间把传感器信号调理得漂漂亮亮&#xff0c;把控制算法写…...

别再死记硬背公式了!用Python手把手带你‘画’出GBDT的每一棵树(附完整代码)

用Python动态可视化GBDT&#xff1a;从零构建每棵决策树的实战指南 在机器学习领域&#xff0c;GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;因其出色的预测性能而广受欢迎。但对于初学者来说&#xff0c;理解这个"黑箱"内部的运作机制往往令人望而…...

087、机器人运动学:雅可比矩阵

087、机器人运动学:雅可比矩阵 一、一个让我熬夜三天的调试故事 去年做六轴协作机器人末端力控的时候,遇到一个诡异的问题:机器人末端在某个位姿下,明明关节速度指令给得很平滑,末端速度却突然跳变,导致力控震荡。当时我盯着示波器上的速度曲线,百思不得其解——运动学…...

从换电博弈到芯片浪潮:新能源汽车与半导体产业交叉机遇解析

1. 行业动态深度解析&#xff1a;从换电博弈到芯片浪潮最近行业里几件事儿挺有意思&#xff0c;放在一起看&#xff0c;能品出不少门道。一边是造车新势力在补能路线上开始“左右互搏”&#xff0c;小鹏汽车悄悄注册了一家经营范围包含“新能源汽车换电设施销售”的子公司&…...

【实战指南】从零构建YOLACT自定义数据集:标注、转换与训练全流程

1. 环境准备与工具安装 第一次接触YOLACT实例分割模型时&#xff0c;最让人头疼的就是环境配置。我清楚地记得去年做智能货架项目时&#xff0c;光是配环境就折腾了两天。为了让各位少走弯路&#xff0c;我把踩过的坑都总结在这里。 首先需要安装的是Python 3.7环境&#xff0c…...

别再手动绑骨了!用Mixamo+Unity 2022,5分钟搞定二次元角色动画(附材质修复全流程)

二次元角色动画高效制作指南&#xff1a;Mixamo与Unity 2022的完美配合 在独立游戏开发领域&#xff0c;角色动画制作往往是耗时最长的环节之一。传统手动绑骨流程不仅需要专业技能&#xff0c;还会消耗大量时间成本。对于二次元风格或Low Poly风格的独立游戏开发者来说&#x…...

终极NGA论坛浏览体验优化指南:5分钟打造你的专属摸鱼神器

终极NGA论坛浏览体验优化指南&#xff1a;5分钟打造你的专属摸鱼神器 【免费下载链接】NGA-BBS-Script NGA论坛增强脚本&#xff0c;给你完全不一样的浏览体验 项目地址: https://gitcode.com/gh_mirrors/ng/NGA-BBS-Script 还在为NGA论坛繁杂的界面和低效的浏览体验烦恼…...

3步解锁12种加密音乐:免费开源工具让数字音乐重获自由

3步解锁12种加密音乐&#xff1a;免费开源工具让数字音乐重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https…...