多进程与多线程的应用
07.07自我总结
一.多进程的应用
1.多进程模块
multiprocessing
其中常用到的几个功能
Process
用于定义进程
复制#定义进程有两种方式
from multiprocessing import Process
#第一种方式定义个方法
def func(aaa):
pritn(123)
if __name__ == '__main__':
process = Process(target=func,args=(123,)) #将target表现进程的任务名称 ,如果任务需要传参就加args
注意:传参必须是集合的形式即使参数只有一个
#第二种定义个类
class Proce(Process): #用类的方法继承Process
def run(self): #run方法为任务执行的内容
print('1')
if __name__ == '__main__':
process = Proce()
如果任务需要传参,
class Proce(Process): # 用类的方法继承Process
def __init__(self,data):
super().__init__()
self.data = data
def run(self):
print(self.data)
if __name__ == '__main__':
process = Proce(1111)
Lock
:用于定义一个互斥锁
- 定义锁
active_children
:查看当前还在运行的自进程信息
cpu_count
:查看cpu进程
2.进程的方法
-
is_alive():返回进程是否在运行。
-
join([timeout]):阻塞当前上下文环境的进程程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
-
start():进程准备就绪,等待CPU调度
-
run():strat()调用run方法,是主进程了运行了run而不是子进程
-
terminate():不管任务是否完成,立即停止工作进程
3.进程的属性
-
daemon:守护进程
-
exitcode(进程在运行时为None、如果为–N,表示被信号N结束)
-
name:进程名字。
-
pid:进程号。
4,进程的守护
使用了daemon
如果
实例化程序A.daemon = True 说明该进程守护主进程,当主进程结束了该子进程默认会跟着结束
如果不做处理deamon默认为False
5.子进程的运行在linux与windows中区别
在windows开启一个子进程他会把主程序自上而下重新运行一遍,所以我们在windows中必须把和子程序相关的丢入main里面中
在linux中只是会记录主程序的自上而下运行后最后的运行状态,而不会重新运行一遍,所以在linux中也不需要丢入main
综上所述还是将子进程丢入main里面运行更加合适
二.多线程的应用
1.多线程的模块
threading
其中常用到的几个功能
Thread
:创建线程,方法与进程相同
Lock
:互斥锁
-
lock = threading.Lock() 创建锁
-
lock.acquire()加锁
-
lock.release()解锁
RLock
: 也是种互斥锁Lock允许在同一线程中被多次acquire。而Lock却不允许这种情况
active_count
:存活的线程数量,返回的个数中包含主线程。
enumerate
:方法返回当前运行中的Thread对象列表
2.线程的方法
与进程相似
-
is_alive():返回进程是否在运行。
-
join([timeout]):阻塞当前上下文环境的线程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
-
start():进程准备就绪,等待CPU调度
-
run():strat()调用run方法,是主线程了运行了run而不是子进程
-
terminate():不管任务是否完成,立即停止工作线程
3.线程的属性
与进程相似
-
daemon:守护线程
-
is_alive:是否存活
-
name:进程名字。
-
idend:线程号。
4.线程的守护
与进程相似
5.子线程的运行在linux与windows中区别
没有区别,都与进程在linux运行的方式一样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理