新闻详情

新闻详情

首页 / 资讯中心 / 详情

python学习7---多进程

发布时间:2026/9/10 10:27:14来源:尧图网络
python学习7---多进程
一、介绍多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间相互之间不干扰。因为GIL锁的存在对于CPU密集型任务例如计算密集型操作使用多进程可以提高程序的效率。优点1.可以利用多核CPU提高计算效率。2.每个进程独立运行安全性高。二、使用Python提供了multiprocessing模块来实现多进程。注意1.multiprocessing.Process 用于创建进程。target参数指定了进程要执行的函数args参数传递给该函数的参数。2.使用 start方法启动进程。3.join方法使主进程等待子进程完成。importmultiprocessingimporttimedefworker(name):print(fWorker{name}starting)time.sleep(2)print(fWorker{name}finished)if__name____main__:processes[]foriinrange(5):pmultiprocessing.Process(targetworker,args(i,))processes.append(p)p.start()forpinprocesses:p.join()print(A11 workers finished)Worker0starting Worker1starting Worker2starting Worker3starting Worker4starting Worker0finished Worker1finished Worker2finished Worker3finished worker4finished All workers finished三、进程池进程池是一种预先创建的一组工作进程这些进程可以重复使用来执行多个任务。通过进程池可以避免频繁创建和销毁进程的开销从而提高效率。4.1 进程池的使用Python的 multiprocessing 模块提供了Pool类来实现进程池。frommultiprocessingimportPoolimporttimedefworker(num):print(fWorker{num}starting)time.sleep(2)print(fWorker{num}finished)returnnum*numif__name__main:withPool(processes4)aspool:resultspool.map(worker,range(10))print(Results:,results)1.创建进程池使用 Poolprocesses4创建一个包含4个进程的进程池。2.提交任务pool.mapworkerrange10将 worker函数应用到 range10中的每一个元素并将任务分配给进程池中的进程去执行。3.获取结果map方法会阻塞主进程直到所有任务完成并返回结果列表。Worker0starting Worker1starting Worker0finished Worker1finished Worker2starting Worker3starting Worker2finished Worker4starting Worker3finished Worker4finished Results:[0,1,4,9,16]4.2 常用方法apply和apply_async:applyfuncargs同步执行类似于普通函数调用阻塞主进程直到任务完成。apply_asyncfuncargs异步执行不阻塞主进程通过回调函数获取结果。frommultiprocessingimportPooldefworker(num):returnnum*numdefprintresult(result):print(Result:,result)if__name__main:withPoolprocesses4aspool:#同步等待结果resultpool.apply(worker,(10,))print(Synchronous Result:,result)#异步等待结果pool.apply_async(worker,(20,),callbackprint_result)pool.close()pool.join()map和 map_async使用该方法传参数时将iterable的每个元素作为参数相当于一次提交多个任务。mapfunciterable同步映射阻塞主进程直到所有任务完成返回结果列表。map_asyncfunciterable异步映射不阻塞主进程通过回调函数获取结果。frommultiprocessingimportPooldefworker(num):returnnum*numdefprintresult(results):print(Results:,results)if__name__main:withPool(processes4)aspool:#同步resultspool.map(worker,range(10))print(Synchronous Results:,results)# 异步pool.mapasync(worker,range(10),callbackprint_result)pool.close()pool.join()starmap 和 starmap_async :starmap(func, iterable_of_tuples):类似于map但可以传递多个参数。starmap_async(func, iterable_of_tuples): 异步版本的 starmapfrommultiprocessingimportPooldefworker(x,y):returnx*ydefprint_result(results):print(Results:,results)if__name__main:withPool(processes4)aspool:#同步resultspool.starmap(worker,[(1,2),(3,4),(5,6)])print(Synchronous Results:,results)#异步pool.starmap_async(worker,[(1,2),(3,4),(5,6)],callbackprint_result)pool.close()pool.join()先试用pool.close()关闭进程池防止更多的任务提交到该池才可以执行pool.join()阻塞主进程等待所有子进程完成。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HyperFrames v0.7.46 深度解析:SDK attachSync 实时 DOM 同步、变量 CRUD 与 Figma 机械式动效转换保真门 2026/9/10 11:00:21

HyperFrames v0.7.46 深度解析:SDK attachSync 实时 DOM 同步、变量 CRUD 与 Figma 机械式动效转换保真门

HyperFrames v0.7.46 深度解析:SDK attachSync 实时 DOM 同步、变量 CRUD 与 Figma 机械式动效转换保真门 【免费下载链接】hyperframes Write HTML. Render video. Built for agents. 项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes 本篇基…

阅读更多 →
GCN、SVM、FNN对比:CORA图结构能提升几个准确率点? 2026/9/10 11:00:21

GCN、SVM、FNN对比:CORA图结构能提升几个准确率点?

简介:这份资源是基于CORA图数据集实现节点级多分类任务的完整项目源码包,面向计算机相关专业的在校学生、老师及企业开发者,尤其适合毕业设计、课程设计或作为图神经网络与经典机器学习对比学习的入门项目。项目中同时实现了GCN、SVM、FNN三种…

阅读更多 →
OpenAI Agents SDK 版本策略与破坏性变更迁移指南:0.Y.Z 语义化版本与 0.1.0~0.22.0 变更日志全解读 2026/9/10 11:00:21

OpenAI Agents SDK 版本策略与破坏性变更迁移指南:0.Y.Z 语义化版本与 0.1.0~0.22.0 变更日志全解读

OpenAI Agents SDK 版本策略与破坏性变更迁移指南:0.Y.Z 语义化版本与 0.1.0~0.22.0 变更日志全解读 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Tren…

阅读更多 →
10分钟跑通Arduino ESP32:一套Arduino语法搞定8款芯片与400多块开发板 2026/9/10 11:00:21

10分钟跑通Arduino ESP32:一套Arduino语法搞定8款芯片与400多块开发板

10分钟跑通Arduino ESP32:一套Arduino语法搞定8款芯片与400多块开发板 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方为 ESP32 系列…

阅读更多 →
每个类只给 1 张图,还能学会分类?李宏毅深度学习作业带你跑通 Few-Shot 小样本学习 2026/9/10 11:00:21

每个类只给 1 张图,还能学会分类?李宏毅深度学习作业带你跑通 Few-Shot 小样本学习

每个类只给 1 张图,还能学会分类?李宏毅深度学习作业带你跑通 Few-Shot 小样本学习 【免费下载链接】leedl-tutorial 《李宏毅深度学习教程》(李宏毅老师推荐👍,苹果书🍎),PDF下载地…

阅读更多 →
10分钟跑通第一块固件:Zephyr west 从干净环境到烧录开发板 2026/9/10 10:57:21

10分钟跑通第一块固件:Zephyr west 从干净环境到烧录开发板

10分钟跑通第一块固件:Zephyr west 从干净环境到烧录开发板 【免费下载链接】zephyr Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures. 项目地址: https://g…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞