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

python中进程和线程

进程Process

定义:进程是操作系统分配资源的基本单位,是程序的一次执行过程。每个进程拥有独立的内存空间、代码段和系统资源。

特点:

  • 彼此独立,进程间的数据和资源默认不共享。
  • 进程切换开销较大(因为涉及到切换内存页表、寄存器等资源)。
  • 多核 CPU 上进程可以实现真正的并行执行。

python通过multiprocessing模块创建和管理进程。

from multiprocessing import Process
import timedef worker():print(f"Process {time.process_time()} start")time.sleep(2)print(f"Process {time.process_time()} end")processes = []
for i in range(3):p = Process(target=worker)processes.append(p)p.start()for p in processes:p.join()print("All processes finished.")

线程Thread

定义:线程是进程的一个执行单元,是 CPU 调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的内存空间和资源。

特点:

  • 同一进程内的线程共享代码段、数据段和堆区。
  • 线程切换开销小,比进程切换更快。
  • 线程间共享数据方便,但会引发同步问题(数据竞争、死锁等)。

python中通过threading模块创建和管理线程。

import threading
import timedef worker():print(f"Thread {threading.current_thread().name} start")time.sleep(2)print(f"Thread {threading.current_thread().name} end")threads = []
for i in range(3):t = threading.Thread(target=worker, name=f'Thread-{i}')threads.append(t)t.start()for t in threads:t.join()print("All threads finished.")

Python 的主线程退出,所有子线程会被强制结束。

num_workers

在我们深度学习训练过程中,通过需要设置num_workers,这其实设置的是数据加载的子进程数目

当num_workers = 0 时,数据加载是在主进程中同步进行;

当num_workers > 0 时,pytorch会启动多个子进程来并行读取和预处理数据,从而加速数据加载,避免GPU因为等待数据而空闲。

num_workers是基于多进程实现的,pytorch 中的DataLoader采用的是python的multiprocessing模块来创建子进程,每个worker相互独立,在内存空间相互隔离。

如何设置num_workers?

一般num_workers = CPU核数 或 CPU核数 - 1:充分利用CPU资源,减少GPU等待;

总结

对比项进程(Process)线程(Thread)
资源占用资源开销大,独立内存空间资源开销小,线程共享进程资源
切换开销切换开销大(保存和加载内存上下文)切换开销小
通信方式需借助 IPC(队列、管道、共享内存)共享内存,通信方便
并行能力多核 CPU 上可实现真正并行受 GIL 限制,CPU 密集型无并行
适用场景CPU 密集型任务,真正的并行计算I/O 密集型任务,多任务调度
稳定性进程间相互独立,一进程崩溃不影响其他进程一个线程异常可能导致整个进程崩溃

ps:面试题

http://www.dtcms.com/a/474348.html

相关文章:

  • 非对称加密使用举例
  • 多视图几何--密集匹配--patchmatchstereo翻译
  • Visual Basic 概述
  • redis项目知识体系
  • C++11(列表初始化、右值引用和移动语义)
  • 北京规划建设 杂志 官方网站多说与网站账号绑定
  • 网站建站外包公司产品做网站如何谁来维护价格
  • 电子商务网站开发文档济宁seo优化公司
  • 提效工具推荐-任务关系和状态自动转为 UML图
  • 集合(Set)的使用场景与习惯养成指南
  • 【每日一题】3186. 施咒的最大总伤害
  • 如何做新网站php 资讯网站
  • 专门做推广的网站吗哪个网站可以改字体
  • 小迪安全v2023学习笔记(一百零三讲)—— 漏扫项目篇PoC开发Rule语法反链判断不回显检测Yaml生成
  • MySQL的练习题二----创建表的练习题
  • 设备技术支持东莞网站建设大连模板网站制作多少钱
  • Dockerfile 指令详解与实战指南
  • 10.1 快速排序(排序(下))
  • 前端梳理体系从常问问题去完善-框架篇(Vue2Vue3)
  • 【数据分享】青藏高原10米分辨率DEM数据集
  • 网站正在建设中空白模板网站建设调查通知
  • 【星闪】Hi2821 | 低功耗开发 + 低功耗管理及按键唤醒例程
  • 怎么做网站的网盘品牌网站建设公司有哪些
  • 【Linux】Socket编程基础
  • 长春建网站wordpress 图片打开慢
  • 91工业设计网模板网站有利于做seo吗
  • 做网站蓝色和什么颜色搭配好看万维网站注册
  • Windows 10 使用 VMware Workstation 搭建 Ubuntu 虚拟机
  • 深入解析Litho的多智能体协同架构与ReAct推理机制
  • 机器视觉---ViBe算法