python多进程编程常用到的方法

110、Python并发编程:利用os模块轻松实现多进程编程 本文通过对多线程和多进程的比较,一方面对多线程的内容做了个梳理总结,另一方面也对多进程的内容,做了一个全局性的引入。最后,通过os模块中相关进程管理的函数,简单演示了多进程。 阅读详情

python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU资源,在python中大部分情况需要使用多进程。

python提供了非常好用的多进程包Multiprocessing,只需要定义一个函数,python会完成其它所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。

multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、LocK等组件

一、Process

语法:Process([group[,target[,name[,args[,kwargs]]]]])

参数含义:target表示调用对象;args表示调用对象的位置参数元祖;kwargs表示调用对象的字典。name为别名,groups实际上不会调用。

方法:

is_alive():
join(timeout):
run():
start():
terminate():

属性:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为-N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新的进程,必须在start()之前设置。

1.创建函数,并将其作为单个进程
from multiprocessing import Process
def func(name):
    print("%s曾经是好人"%name)

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()   #start()通知系统开启这个进程
2.创建函数并将其作为多个进程
from multiprocessing import Process
import random,time

def hobby_motion(name):
    print('%s喜欢运动'% name)
    time.sleep(random.randint(1,3))

def hobby_game(name):
    print('%s喜欢游戏'% name)
    time.sleep(random.randint(1,3))

if __name__ == "__main__":
    p1 = Process(target=hobby_motion,args=('小明',))
    p2 = Process(target=hobby_game,args=('张三',))
    p1.start()
    p2.start()

执行结果:

小明喜欢运动
张三喜欢游戏
3.将进程定义为类(开启进程的另一种方法,并不是很常用)
from multiprocessing import Process
class MyProcess(Process):
    def __init__(self,name):
        super().__init__()
        self.name = name

    def run(self):  #start()时,run自动调用,而且此处只能定义为run。
        print("%s曾经是好人"%self.name)

if __name__ == "__main__":
    p = MyProcess('kebi')
    p.start()  #将Process当作父类,并且自定义一个函数。
4.daemon程序对比效果

不加daemon属性

import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()
    print("this is over")

#执行结果
this is over
work start:Thu Nov 30 16:12:00 2017
work end:Thu Nov 30 16:12:02 2017

加上daemon属性

from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.daemon = True   #父进程终止后自动终止,不能产生新进程,必须在start()之前设置
    p.start()
    print("this is over")

#执行结果
this is over

设置了daemon属性又想执行完的方法:

import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.daemon = True
    p.start()
    p.join()  #执行完前面的代码再执行后面的
    print("this is over")

#执行结果
work start:Thu Nov 30 16:18:39 2017
work end:Thu Nov 30 16:18:41 2017
this is over
5.join():上面的代码执行完毕之后,才会执行后i面的代码。

先看一个例子:

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p1.start()
    p2.start()
    print("this is over")

执行结果:
this is over   #最后执行,最先打印,说明start()只是开启进程,并不是说一定要执行完
A lifelong friend:kebi,12048
A lifelong friend:maoxian,8252
A lifelong friend:xiaoniao,6068
Good bother:maoxian   #最先打印,第二位执行
Good bother:kebi     
Good bother:xiaoniao

添加join()

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p.join()   #上面的代码执行完毕之后,再执行后面的
    p1.start()
    p1.join()
    p2.start()
    p2.join()
    print("this is over")
    print(time.time() - start)

#执行结果
A lifelong friend:kebi,14804
Good bother:kebi
A lifelong friend:maoxian,11120
Good bother:maoxian
A lifelong friend:xiaoniao,10252  #每个进程执行完了,才会执行下一个
Good bother:xiaoniao
this is over
6.497815370559692   #2+1+3+主程序执行时间

改变一下位置

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p1.start()
    p2.start()
    p.join()   #需要2秒
    p1.join()  #到这时已经执行完
    p2.join()   #已经执行了2秒,还要1秒
    print("this is over")
    print(time.time() - start)

#执行结果
#Python小白学习交流群:711312441
A lifelong friend:kebi,13520
A lifelong friend:maoxian,11612
A lifelong friend:xiaoniao,17064  #几乎是同时开启执行
Good bother:maoxian
Good bother:kebi
Good bother:xiaoniao
this is over
3.273620367050171  #以最长时间的为主
6.其它属性和方法
from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()
    p.terminate()  #将进程杀死,而且必须放在start()后面,与daemon的功能类似

#执行结果
this is over
from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    # p.daemon = True
    print(p.is_alive())
    p.start()
    print(p.name)   #获取进程的名字
    print(p.pid)    #获取进程的pid
    print(p.is_alive())  #判断进程是否存在
    print("this is over")
19、Python 多进程与事件驱动编程入门 本文介绍了 Python 中的多进程编程和事件驱动编程的基本概念与应用。通过 PyCSP 模块展示了多进程编程的简单示例,详细讲解了事件驱动编程的核心组件——事件循环以及 Python 的 Asyncio 模块。涵盖了事件循环方法、任务管理、相关函数及其应用场景,并提供了多个代码示例帮助开发者快速掌握事件驱动编程技巧。适用于图形用户界面、网络编程、游戏开发和物联网等领域。 阅读详情

相关推荐

具身智能端到端大模型VLA (Vision Language Action)

在语言为条件的机器人任务中,策略必须具备理解语言指令、视觉感知环境并生成适当动作的能力,这就需要VLA的。例如,在自动驾驶领域,传统的做法是将感知、预测、规划等步骤分开处理,而VLA则试图用一个统一的框架来替代这种分立的方法。另外,VLA的模型对于算力的需求很大,单片AI算力1000Tops的Thor大概率会延期发布,加上英伟达芯片的量产时间与成本挑战,以及在国内的应用情况,对车企而言是个大问题。以谷歌DeepMind推出的RT-2为例,该模型可以在新的物体、背景和环境中表现出显著改善的性能。

具身智能机器人 1万+

Python中的进程

在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。args表示以元组的方式给执行任务传参kwargs表示以字典方式给执行任务传参。

__Samual的博客 3684

Flotherm XT学习历程

大家好,通过半年的热仿真软件学习使用,最终发现最好用,最好上手的软件就是Flotherm XT,对新手非常友好,但由于软件近几年才发布,网上教程非常少,后面我将在这里持续分析软件使用心得,和大家一起学习。

xiaoredred的博客 6268

python多进程-----multiprocessing包

multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多线程并不能做到真正的并行处理,只能完成相对的并发处理,那么我们需要的就是python的多进程来完成并行处理,把所有的cpu资源都利用起来。multiprocessing的很大一部分与threading...

weixin_34414196的博客 307

ArcGIS属性表汉字转拼音

接着我安装了一个编辑器“PyCharm Community Edition 2019.3.3\bin\pycharm64.exe”,在里面添加“pypinyin”包,然后将其设置为arcgis的编辑器和调试程序,还是失败;我在10.6的机器上折腾了上面几步,直到两周后脚本突然运行成功,我也不确定是哪一步导致pypinyin包配置成功,因此将心得体会写出来,如果过一段时间,打开10.2的机器运行脚本成功了,再写后续.......,按照“配置方法1:”进行尝试,显示配置失败。

2301_77413856的博客 1295

威联通改装飞牛fnOS全攻略:从刷机到Docker影视部署

NAS系统是家庭数字存储的核心,x86架构的威联通设备凭借通用引导和驱动支持,成为改装替代系统的理想平台。飞牛fnOS作为基于Debian的国产NAS系统,以简洁UI、内置Docker和影视墙以及硬件转码能力,吸引了大量玩家。通过U盘引导安装、BIOS调整、系统盘SSD部署,可实现系统切换;原机械硬盘可挂载为存储池,配合Docker部署下载、远程访问等容器,影视中心自动削刮海报墙,硬件转码保障4K播放。改装过程需注意引导失败、硬盘识别、核显驱动等问题。这套方案能让老旧威联通焕发新生,兼顾易用性与扩展性。本文

weixin_33585822的博客 778

Python标准库11 多进程探索 (multiprocessing包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!   在初步了解Python多进程之后,我们可以继续探索multiprocessing包中更加高级的工具。这些工具可以让我们更加便利地实现多进程。   进程池 进程池 (Process Pool)可以创建多个进程。这些进程就像是随时待命的士兵,准备执行任务(程序)。一个进程...

weixin_33840661的博客 291

地理空间智能体(GI Agent)

地理空间智能体(Geospatial Intelligence Agent, GI Agent)是AI Agent技术与地理信息系统(GIS)深度融合的产物。其核心是以大型语言模型(LLM)为驱动,通过自然语言理解、任务分解和工具调用能力,实现地理空间任务的自动化执行。​关键特性​自主性​:独立规划任务流程(如空间数据检索、分析、可视化);​交互性​:支持自然语言对话交互,替代传统图形界面操作;​扩展性​:灵活集成第三方工具和API,支持跨平台协作。

百态·数智思维 | 聚焦大数据、量化与未来AI 2033

python的安装及第三方包

如何安装python及第三方包 作者:郜庆科 1 Python简介 Python 是一门非常强大的语言,我们可以使用它完成许多相当高级的内容。 Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容。用Python开发,许多功能不必从零编写,直接使用现成的即可。 下面就将介绍如何安装Python还有如何获取第三方的安装包并使用它们。当然也可以直接跳...

郜科科的博客 8万+

STM32-DAC定时器触发三角波生成【频率与幅度精准控制】

本文详细介绍了STM32 DAC定时器触发三角波生成的原理与实现方法,涵盖硬件配置、频率与幅度精准控制技巧及代码实现。通过定时器触发DAC模块,可灵活调节三角波的频率和幅度,适用于信号发生器等高精度应用场景。

weixin_29161785的博客 454

【异常】Cursor 编辑器 “Too many computers“ 报错排查与完整解决方案

该报错通常在启动Cursor、调用AI对话/代码补全核心功能时触发,会直接阻断编辑器AI能力的正常使用。

奶爸的编程之路,也就一周冷个三天 463

python最常用的编程方式_python多进程编程常用到的方法

python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU资源,在python中大部分情况需要使用多进程。python提供了非常好用的多进程包Multiprocessing,只需要定义一个函数,python会完成其它所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queu...

weixin_39978863的博客 201

ABAP Platform 2025 到来之后,我们该怎样重新理解 SAP S/4HANA 2025 的开发边界

2025年10月,SAP正式发布S/4HANA Cloud Private Edition 2025及S/4HANA 2025,其技术底座ABAP Platform 2025全面支持SAP HANA数据库。新版平台强调Clean Core理念升级为四级成熟度模型,推动ABAP Cloud成为扩展开发首选方案。AI能力正式融入ABAP开发全流程,包括代码生成、迁移辅助等场景。RAP框架显著增强,支持跨业务对象协作、树形视图等复杂业务场景。ADT开发工具持续进化,新增内存分析、单元测试等专业功能,形成完整开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 315

python 多进程和多线程编程

1. 简介 多进程(multiprocessing)模块是在 Python 2.6 版本中加入的,和多线程(threading)模块类似,都是用来做并行运算的。不过Python既然有了threading,为什么还要搞一个multiprocessing呢?这是因为Python内部有一个全局解释锁(GIL),任何一个进程任何时候只允许一个线程进行CPU运算,如果一个进程中的某个线程在进行CPU运算时获得GIL,其他线程将无法进行CPU运算只能等待,使得多线程无法利用CPU多核的特性。多进程处理实际上对每个任务都

orangerfun的博客 331

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python 多进程编程权威指南:从原理到实战

本文介绍了Python多进程编程的核心概念和实践方法,主要内容包括: 进程本质:进程是操作系统资源分配的基本单位,具有独立的内存空间和执行环境。 进程与线程对比分析:多进程内存隔离但开销大,多线程共享内存但开销小,各适用于不同场景。 Python GIL机制解析:解释了GIL对多线程的限制以及多进程如何规避这一限制。 multiprocessing模块使用:详细介绍了创建进程的两种方法(函数式和类继承式),以及进程间通信的Queue和Pipe机制。 进程池管理:展示了如何利用进程池高效处理CPU密集型任务。

YAnt的博客 621

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【python系统编程1】多进程

【python系统编程1】多进程1 进程的含义1.1 程序、进程与线程的管理1.2 多进程的运行原理1.3 并发与并行1.4 pid和ppid2 Process类2.1 入门案例2.2 传递参数2.3 常用方法与属性2.4 pid和ppid2.5 类进程2.6 Process进程通信2.6.1 进程通信的问题2.6.2 简单的通信案例2.6.3 队列的常用方法与参数2.7 Process进程的生命...

kzl_knight的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python学习笔记35 多进程第1部分 进程的常用属性,方法,同步异步处理等

python学习笔记35 多进程第1部分 进程的常用属性,方法,同步异步处理等

Chris2357的专栏 191

Python-多进程编程 (multiprocessing 模块)

本文对 Python 的 multiprocessing 模块进行归纳总结,该模块支持多核并行处理,可以提升程序效率。

kusunoki的博客 3114

python常用方法总结,python常考概念题

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。·关注点在对象的行为,而不是类型(duck typing)◆比如file,StringIO,socket 对象都支持read/write方法(file like object)◆再比如定义了__iter_魔术方法的对象可以用for迭代鸭子类型更关注接口而不是类型什么是monkey patch?哪些地方用到了?自己如何实现?◆所谓的monkey patch 就是运行时替换。

Bxwfjdjdbdgj的博客 767

Python的多线程threading和多进程multiprocessing

python中的多线程就是在一个进程中存在着多个线程,在线程中,所有的线程都是共享资源的,线程之间的数据通信很简单。但是python仅支持一个线程的运行,因为python中存在一个全局解释器锁GIL(global interpreter lock),正是这个锁能保证同一时刻只有一个线程在运行,所以多线程依旧像是单线程的运行。 GIL无疑就是一把对多线程有影响的全局锁,解决它对多线程的影响,不单单是...

weixin_30517001的博客 325

python并发编程之多进程

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块t...

weixin_30448685的博客 255

Python多线程、多进程基础

多线程编程基础 多线程: 在一个进程内部,要同时干很多事,就需要同时执行多个子任务,我们把进程内的这些子任务叫做线程,线程的内存空间是共享的,每个线程都共享一个进程的资源。 模块: _thread模块 低级模块; threading模块 高级模块 对_thread模块进行了封装。 在线程里,传递参数有三种方法: 使用元组传递 threading.Thread(target=方法名, args(参数1,参数2,…) 使用字典传递 threading.Thread(target=方法名,kwargs={“

weixin_45605352的博客 226
上一篇: python如何制作自己的模块
下一篇: python中的exec()、eval()以及complie()
Python热爱者
博客等级 码龄7年 3056粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值