Python 进阶语法 04 多线程多进程

多线程与多进程:深入解析与应用

多任务概述

多任务,即多个任务“同时”执行,是提升程序执行效率的重要手段。通过多任务处理,我们能够充分利用CPU资源,特别是在多核CPU环境下,实现真正的并行执行。在代码层面上,多任务主要通过多线程和多进程两种方式实现。

并发与并行
  • 并发:主要针对于单核CPU。多个任务同时请求执行,但同一时刻CPU只能处理一个任务。操作系统通过时间片轮转等机制,使任务交替执行,因时间间隔极短,给人以同时执行的错觉。
  • 并行:针对多核CPU。多个任务能够真正的同时执行,每个任务占用一个CPU核心。
多进程

概述

  • 进程:是操作系统进行资源分配和调度的最小单位,可以理解为一个可执行程序或文件(如*.exe)。对于CPU而言,进程是分配资源的基本单位。
  • 线程:是进程的执行路径或单元,是CPU调度资源的最小单位。可以理解为进程内部的一条独立执行路径。

实操

多进程的实现主要通过Python的multiprocessing模块。

  1. 导包

    import multiprocessing
  2. 创建进程

    p1 = multiprocessing.Process(target=函数名, name='进程名', args=(元组,), kwargs={字典})
  3. 启动进程

    p1.start()

特点

  • 进程间数据隔离,确保数据安全性。
  • 默认情况下,主进程会等待所有子进程执行完毕再结束。
  • 可通过设置守护进程(daemon=True)或手动终止进程(terminate())来控制子进程的生命周期。
多线程

概述

与多进程类似,但线程是进程内部的执行路径,多个线程共享进程的内存空间。

实现步骤

  1. 导包

    import threading
  2. 创建线程

    th = threading.Thread(target=函数名, name='线程名', args=(元组,), kwargs={字典})
  3. 启动线程

    th.start()

特点

  • 线程执行具有随机性,因为多个线程在竞争CPU资源。
  • 默认情况下,主线程会等待所有子线程执行完毕再结束,但可通过设置守护线程(daemon=True)来改变这一行为。
  • 线程间数据共享,需特别注意并发访问共享数据时的安全问题,可通过加锁(线程同步)来解决。

线程同步

  • 创建锁
    mutex = threading.Lock()
  • 加锁与释放锁
    mutex.acquire() # 加锁 
    # 临界区代码 
    mutex.release() # 释放锁
进程与线程的关系及区别
  • 关系:线程依赖进程,每个进程至少有一个线程。
  • 特点区别
    • 进程间数据隔离,线程间数据共享。
    • 进程资源开销大,线程资源开销小。
    • 多进程程序比单进程多线程程序更稳定。
优缺点
  • 进程
    • 优点:可以实现多核操作,资源隔离性好。
    • 缺点:资源开销大。
  • 线程
    • 优点:资源开销小,切换速度快。
    • 缺点:不能有效利用多核CPU,共享数据需注意同步问题。
扩展:

上下文管理器

上下文管理器通过实现__enter__()__exit__()方法,可以自动管理资源,结合with语句使用,简化资源获取与释放的复杂度。

生成器

生成器提供了一种高效的数据生成方式,按需生成数据,节省内存资源。通过yield关键字可以创建生成器。

property属性

property装饰器可以将方法伪装成属性,简化属性的访问与设置操作。

总结来说,多线程与多进程是实现多任务处理的两种主要方式,各有优劣,应根据具体需求选择合适的方案。同时,通过扩展知识如上下文管理器、生成器及property属性的学习,可以进一步提升Python编程的效率和优雅性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值