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

python学习7---多进程

一、介绍
多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。
因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。
优点:
1.可以利用多核CPU,提高计算效率。
2.每个进程独立运行,安全性高。

二、使用
Python提供了multiprocessing模块来实现多进程。
注意:
1.multiprocessing.Process 用于创建进程。target参数指定了进程要执行的函数,args参数传递给该函数的参数。
2.使用 start()方法启动进程。
3.join()方法使主进程等待子进程完成。

import multiprocessing 
import time def worker(name):print(f"Worker { name} starting")time. sleep(2)print(f"Worker { name} finished")if __name__ == '__main__':processes -[]for i in range(5):p = multiprocessing. Process(target=worker, args=(i,))processes. append(p) p. start()for p in processes: p. join()print("A11 workers finished")
Worker 0 starting
Worker 1 starting
Worker 2 starting
Worker 3 starting
Worker 4 starting
Worker 0 finished
Worker 1 finished
Worker 2 finished
Worker 3 finished
worker 4 finished
All workers finished

三、进程池
进程池是一种预先创建的一组工作进程,这些进程可以重复使用来执行多个任务。通过进程池,可以避免频繁创建和销毁进程的开销,从而提高效率。
4.1 进程池的使用
Python的 multiprocessing 模块提供了Pool类来实现进程池。

from multiprocessing import Pool 
import time def worker(num):print(f"Worker { num} starting")time. sleep(2)print(f"Worker { num} finished") return num * num if __name__ == 'main': with Pool(processes-4) as pool: results = pool.map(worker, range(10))print("Results:", results)

1.创建进程池:使用 Pool(processes=4)创建一个包含4个进程的进程池。
2.提交任务:pool.map(worker,range(10))将 worker函数应用到 range(10)中的每一个元素,并将任务分配给进程池中的进程去执行。
3.获取结果:map方法会阻塞主进程,直到所有任务完成,并返回结果列表。

Worker 0 starting 
Worker 1 starting
Worker 0 finished
Worker 1 finished 
Worker 2 starting 
Worker 3 starting
Worker 2 finished
Worker 4 starting 
Worker 3 finished 
Worker 4 finished 
Results:[0,1,4, 9,16]

4.2 常用方法
apply和apply_async:
apply(func,args):同步执行,类似于普通函数调用,阻塞主进程直到任务完成。
apply_async(func,args):异步执行,不阻塞主进程,通过回调函数获取结果。

from multiprocessing import Pool def worker(num):return num*num def print result(result):print("Result:",result)if __name__ == 'main':with Pool(processes=4as pool:#同步等待结果result = pool.apply(worker,(10,))print("Synchronous Result:",result)#异步等待结果pool.apply_async(worker,(20,),callback=print_result)pool.close()pool.join()

map和 map_async:
使用该方法传参数时,将iterable的每个元素作为参数,相当于一次提交多个任务。
map(func,iterable):同步映射,阻塞主进程直到所有任务完成,返回结果列表。
map_async(func,iterable):异步映射,不阻塞主进程,通过回调函数获取结果。

from multiprocessing import Pool def worker(num): return num * num def print result(results): print("Results:", results) if __name__ == 'main': with Pool(processes=4) as pool:#同步results = pool.map(worker, range(10)) print("Synchronous Results:", results) # 异步pool.map async(worker, range(10), callback=print_result)pool. close()pool.join()

starmap 和 starmap_async :
starmap(func, iterable_of_tuples):类似于map,但可以传递多个参数。
starmap_async(func, iterable_of_tuples): 异步版本的 starmap

from multiprocessing import Pool def worker(x, y):return x * y
def print_result(results): print("Results:", results) if __name__ == 'main':with Pool(processes=4) as pool:#同步results = pool.starmap(worker, [(1, 2), (3, 4), (5, 6)])print("Synchronous Results:", results)#异步pool.starmap_async(worker, [(1, 2), (3, 4), (5, 6)], callback=print_result) pool.close()pool.join()

先试用pool.close()关闭进程池,防止更多的任务提交到该池,才可以执行pool.join()阻塞主进程,等待所有子进程完成。

相关文章:

python学习7---多进程

一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。 因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。 优点&am…...

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…...

Java后端面试题

Redis缓存穿透、雪崩、击穿,布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上, 现在已经完成了分库分表, 现在的问题出现了, 需要继续新增数据库节点, 请…...

【Git】远程仓库新建分支后,拉到本地开发

1. 在远程仓库上创建分支 2. git fetch origin:在本地同步远程仓库的分支(获取远程仓库所有分支的所有修改) 3. git remote -a:查看所有分支(远程+本地) 4. git checkout -b 本地名 远程仓库…...

React H5设置企业级v6版本路由的配置

路由配置是项目开发的必要一环,尤其是目前流行SPA,下面看看如何使用v6版本路由进行合理的H5路由配置 一、基本页面结构(目录根据开发要求建,下面仅用于展示配置路由) 二、具体文件实现 1. index.tsx import React f…...

【微信小程序】全局配置

1. 全局配置文件及常用的配置项 2.window (1).小程序窗口的组成部分 (2). 了解 window 节点常用的配置项 (3). 设置导航栏的标题 (4). 设置导航栏的背景色 (5). 设置导航栏的标题颜色 (6). 全局开启下拉刷新功能 (7). 设置下拉刷新时窗口的背景色 (8).设置下拉刷新时 loading …...

25届秋招网络安全面试资料库

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…...

Adobe Dimension DN v4.0.2 解锁版下载安装教程 (专业的三维3D建模工具)

前言 Adobe Dimension(简称DN)是一款3D设计软件,三维合成和渲染工具,2D平面的二维转为3D立体的三维合成工具,用于3Dmax\C4D\MAYA等三维软件生成的效果图,在3D场景中排列对象、图形和光照。3D应用程序使用的…...

Python中*args 和 **kwargs作参数时有什么区别

*args 和 **kwargs 是 Python 函数定义中用于处理可变数量的参数的语法,初学者对于二者总是傻傻区分不了,今天我们就来详细解读一下这两个在参数传递时有什么不同。 首先要明白单个星号可以解包元组或者列表,两个星号可以解包字典。如&#…...

[CSS3]2D与3D变换技术详解

文章目录 2D变换(2D Transform)3D变换(3D Transform)结语 CSS3中的2D变换与3D变换是指通过transform属性对HTML元素进行几何操作,使其在二维或三维空间中进行移动、旋转、缩放和倾斜等变换。这些变换为前端开发者提供了…...

大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光

大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光 一、分时曝光需求二、3.3V信号分时曝光设计 写在前面 上班了,没多少时间再去精度论文了,大多是项目上的事情。 一、分时曝光需求 一般的12V光源通过光源控制器与大恒相机Line1线连接…...

electronjs实现打开的网页密码自动保存

在 Electron 中实现自动保存网页密码的功能涉及到几个步骤,以下是一个基本的实现思路: 1. 监听登录事件 首先,你需要监听用户的登录事件。当用户在一个网页上登录后,通常会有一个 POST 请求发送到服务器验证凭据。你可以监听这个…...

观测云的自动化监控:CRD 资源与自动发现

在云原生技术快速发展的今天,Kubernetes已成为企业容器化应用的中心舞台。随着应用的规模化和动态化,传统的监控方法已经难以满足需求。自动化监控,以其高效性和准确性,成为云原生监控的新趋势。观测云平台通过与Kubernetes的深度…...

九、OpenCVSharp 中的图像形态学操作

文章目录 简介一、腐蚀1. 腐蚀的原理和数学定义2. 结构元素的形状和大小选择3. 腐蚀操作的代码实现和效果展示二、膨胀1. 膨胀的概念和作用2. 与腐蚀的对比和组合使用(如开运算、闭运算)三、开运算1. 开运算的定义和用途(去除小的明亮区域)2. 开运算在去除噪声和分离物体方…...

http和websocket

http和websocket是什么 网络通信的协议 区别 http: 只能客户端发送,服务端接收。 websocket: 客户端和服务端都可以发送和接收数据。 链接...

Go 语言错误处理

不管使用哪种语言,程序代码都可能包含各种错误,例如语法错误、逻辑错误、除 0 错误和文件缺失等。因此,每种编程语言都有处理错误的内置机制。 1. Go 程序中的错误 需要指出的是,错误有多种类型。语法错误通常是开发人员在编写代…...

LVS部分配置1

LVS nat服务器(作时间服务器) [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# yum -y install ntpdate [rootlocalhost ~]# ntpdate cn.ntp.org.cn [rootlocalhost ~]# which ntpdate [rootlocalhost…...

datax和datax-web打包成docker运行

概述 datax和datax-web从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker镜像后迁移就方便多了; 因为我的mysql版本是8,需要在datax的read和write中手动添加8的jdbc驱动 所以我先各自下载好了datax和data…...

命令行参数环境变量

目录 前言: 命令行参数: 现象: 这些参数的意义: 为什么要这么做? 这些事是谁做的呢? 环境变量 现象: 创建环境变量: 结合程序理解: 前言: 我们在前…...

『大模型笔记』WizardLM:使大型预训练语言模型能够遵循复杂的指令

WizardLM: Empowering Large Pre-Trained Language Models to Follow Complex Instructions 文章目录 一. WizardLM:使大型预训练语言模型能够遵循复杂的指令二. Evolve-Instruct(优化版)2.1. 概述2.2. 实施二. 参考文献WizardLM:使大型预训练语言模型能够遵循复杂的指令:…...

编程-设计模式 2:抽象工厂模式

设计模式 2:抽象工厂模式 定义与目的 定义:抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。目的:该模式的主要目的是解耦客户端代码与产品类之间的关系,并确保一…...

阿里云智能大数据演进

本文根据7月24日飞天发布时刻产品发布会、7月5日DataFunCon2024北京站:大数据大模型.双核时代实录整理而成,演讲信息如下: 演讲人:徐晟 阿里云研究员/计算平台产品负责人 主要内容: Overview - 阿里云大数据 AI 产品…...

Java面试题———Spring篇①

目录 一,谈谈你对SpringIOC的理解 二,Spring中有哪些依赖注入方式 三,你用过哪些Spring注解 四,SpringBean的作用域有几种 五,Spring中的bean线程安全吗 六,谈谈你对SpringAOP的理解 七,…...

4章10节:用R做数据重塑,变体函数应用详解和可视化的数据预处理介绍

数据重塑(Data Reshaping)是将数据从一种结构转换为另一种结构的过程,是清理、分析和可视化数据的重要步骤。R语言作为数据科学的强大工具,提供了许多包来帮助我们进行数据重塑,其中最常用的就是dplyr包。dplyr包以其简洁的语法和高效的操作速度著称,它不仅可以帮助我们进…...

Socks5代理IP在跨境电商和网络爬虫领域的实战应用

在现代互联网环境中,Socks5代理IP因其强大的灵活性和隐私保护功能,成为了跨境电商和网络爬虫领域的重要工具。本文将探讨Socks5代理IP的基本原理,并详细介绍其在跨境电商和网络爬虫中的实际应用。 1. Socks5代理IP简介 Socks5代理IP是一种网…...

农业上的目标跟踪论文汇总

文章目录 2022Multi-object tracking using Deep SORT and modified CenterNet in cotton seedling counting (Computers and Electronics in Agriculture)A novel apple fruit detection and counting methodology based on deep learning and trunk tracking in modern orcha…...

gpxt 小程序:轨迹合并与管理的高效工具

引言 在户外探险和运动追踪领域,GPXT小程序以其独特的轨迹管理和合并功能脱颖而出,成为徒步、骑行等运动爱好者不可或缺的工具。本文将详细介绍GPXT小程序的核心功能及其对户外活动爱好者的实用性。 核心功能概览 轨迹合并 GPXT小程序允许用户将多个…...

elasticsearch集成springboot详细使用

1.es下载&配置 配置JVM 配置跨域 配置https和密码 2.es启动 .\elasticsearch.bat 或 后台启动: nohup ./bin/elasticsearch& 浏览器访问:https://localhost:9200 输入账户:elastic / 123456 3.重置es密码 .\elasticsearch-r…...

html+css网页制作 化妆品电商4个页面

htmlcss网页制作 化妆品电商4个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff…...

微调LLama 3.1——七月论文审稿GPT第5.5版:拿早期paper-review数据集微调LLama 3.1

前言 对于llama3,我们之前已经做了针对llama3 早7数据微调后的测评 去pk llama2的早7数据微调后,推理测试集中的早期paper:出来7方面review去pk gpt4推理测试集中的早期paper:7方面reviewground truth是早期paper的7方面人工rev…...

响应式网站的优缺点/关键词怎样做优化排名

原理图 二话不说,直接上图 总结 主Reactor通过Selector监听连接事件,收到通知后。通过Acceptor处理连接事件 当Acceptor处理连接事件之后,MainReactor将事件分配给SubReactor SubReactor将这个事件加入到队列中,并且创建Han…...

网站如何做提交的报名表/提高工作效率的方法有哪些

如何升级python的包、如何升级python包的版本 pip install --upgrade input 如何升级python对应版本的包 pip install --upgrade input0.0.0...

英文网站建设公司报价/深圳专业建站公司

首先要先引用AspNetPager.dll文件 然后在<html>上面添加下面代码&#xff1a; <% Register Assembly"AspNetPager" Namespace"Wuqi.Webdiyer" TagPrefix"webdiyer" %> 然后在repeater控件下添加AspNetPager控件&#xff1a; <web…...

king wordpress theme/外链网站是什么

“近日&#xff0c;水韵城商业管理有限公司与竞优软件达成战略合作协议&#xff0c;在水韵城天虹商业地产管理信息化方面开展合作关系&#xff0c;深化合作内容。水韵城天虹将使用竞优的商业运营管理系统&#xff0c;搭建一体化管控和运营信息化平台&#xff0c;实现从传统管理…...

电影网站设计模板/专业搜索引擎seo公司

编程新手猜数字游戏 #include <stdio.h> #include <time.h> #include<stdlib.h> void main() { srand(time(0)); int n rand() % 100 1,c 0,a 0; printf("我有一个1-100的随机数,你猜是多少&#xff1a;>"); do { scanf("%d", &…...

郉台网站建设/百度贴吧的互动社区

好不容易找到一个小米比较可爱的手机套&#xff0c;真希望快点出好多好多好漂亮的。这个我买的蓝色&#xff0c;到货后给大家晒晒哦。 珍珠手机壳高档 &#xff0c;简单&#xff0c;时尚 &#xff08;这个价格只限量1个&#xff0c;下一个就不止这个价了&#xff09;~ 我买的是…...