Python多进程互斥锁原理与实现解析

Hazel
Hazel
发布时间:2026-10-13| 4人浏览过
原创

本文解析Python多进程中互斥锁的工作原理。由于多进程内存隔离但共享文件系统,并发访问同一资源会导致数据错乱。通过引入互斥锁(Lock),将并发操作转化为串行执行,确保数据一致性,虽牺牲部分效率但避免了竞争错误。

多进程内存隔离与资源竞争问题

在运行多进程时,每个子进程拥有独立的内存空间,彼此之间无法直接共享数据。

互斥锁的工作原理

互斥锁机制

尽管进程间内存隔离,但它们运行于同一操作系统下,共享同一套文件系统。因此,多个进程可以访问同一个文件或打印终端。

这种共享资源的行为会引发竞争,导致输出结果错乱。


#并发运行,效率高,但竞争同一打印终端,带来了打印错乱
from multiprocessing import Process
import time
def task(name):
  print("%s 1" % name)
  time.sleep(1)
  print("%s 2" % name)
  time.sleep(1)
  print("%s 3" % name)
if __name__ == '__main__':
  for i in range(3):
    p = Process(target=task, args=("子进程%s" % i,))
    p.start()
'''
子进程2 1
子进程0 1
子进程1 1
子进程2 2
子进程1 2
子进程0 2
子进程2 3
子进程1 3
子进程0 3
'''

为了解决这一问题,需要引入锁机制进行控制。互斥锁的核心含义是互相排斥,类似于多个人争抢使用同一个卫生间资源。

互斥锁的工作流程是:当某个进程获取到锁(即“抢到卫生间”)后,其他进程必须等待。只有当持有锁的进程完成任务并释放锁后,其他进程才有机会重新争抢锁。

互斥锁的本质是将并发操作转换为串行执行。虽然这降低了运行效率,但有效保证了数据的安全性,避免了数据错乱。

一旦加上互斥锁,并发效果即消失,同一时刻仅有一个进程能够运行。互斥锁通过将并发转为串行来降低效率,从而确保数据正确。

Python中互斥锁的实现方法

解决方案如下:

导入 multiprocessing 模块中的 Lock 类。

程序启动后,所有进程首先尝试获取锁,只有成功获取锁的进程才能继续执行。

当该进程执行完毕并释放锁后,其他进程才能继续争抢锁并执行。


from multiprocessing import Process, Lock
import time
def task(name, mutex):
  # 加锁
  mutex.acquire()
  print("%s 1" % name)
  time.sleep(1)
  print("%s 2" % name)
  time.sleep(1)
  print("%s 3" % name)
  # 把锁拆了
  mutex.release()
if __name__ == '__main__':
  # 建一个对象实例
  mutex = Lock()
  for i in range(3):
    # 把锁传给子进程 让所有子进程用同一把锁
    p = Process(target=task, args=("子进程%s" % i, mutex))
    p.start()
'''
现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行
等这个进程运行完了解锁后 再到其他进程继续抢锁
'''
'''
子进程0 1
子进程0 2
子进程0 3
子进程1 1
子进程1 2
子进程1 3
子进程2 1
子进程2 2
子进程2 3
'''

这种机制牺牲了部分运行效率,但确保了数据不会发生错乱。

以上即为本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。