Python 多线程multiprocess 与多进程threading

本文深入解析了Python中进程和线程的管理,包括参数、方法、属性介绍,全局变量的处理,以及进程间的通信方式。同时,详细阐述了多线程中队列的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Process

参数介绍:
1 group参数未使用,值始终为None
2 target表示调用对象,即子进程要执行的任务
3 args表示调用对象的位置参数元组,args=(1,2,‘a’,)
4 kwargs表示调用对象的字典,kwargs={‘name’:‘a’,‘age’:18}
5 name为子进程的名称

方法介绍:
1 p.start():启动进程,并调用该子进程中的p.run()
2 p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法
3 p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁
4 p.is_alive():如果p仍然运行,返回True
5 p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

属性介绍:
1 p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
2 p.name:进程的名称
3 p.pid:进程的pid
4 p.exitcode:进程在运行时为None、如果为–N,表示被信号N结束(了解即可)
5 p.authkey:进程的身份验证键,默认是由os.urandom()随机生成的32字符的字符串。这个键的用途是为涉及网络连接的底层进程间通信提供安全性,这类连接只有在具有相同的身份验证键时才能成功(了解即可)

全局变量
主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。
如果要数据共享全局变量需要用
multiprocessing.Value(“d”,10.0),数值
multiprocessing.Array(“i”,[1,2,3,4,5]),数组
multiprocessing.Manager().dict(),字典
multiprocessing.Manager().list(range(5))

进程通信数据交互(进程之间传递数据)用进程
队列 multiprocessing.Queue(),单向通信
管道 multiprocessing.Pipe() ,双向通信

多线程

队列Queue
q = Queue(5) 创建队列,且最大存储量为5
q.put(‘xxx’) 如果队列满,程序卡在这里等待
q.put(‘xxx’, False) 如果队列满,直接报错
q.put(‘xxx’, Ture,3) 如果队列满,等待3s,后报错 获取数据
q.get() 如果队列空,程序卡在这里等待
q.get(False) 如果队列空,直接报错
q.get(True, 3) 如果队列空,等待三秒,再报错 常用方法
q.empty() 判断队列是否为空
q.full() 判断队列是否已满
q.qsize() 获取队列长度

多线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值