Python多线程与互斥锁模拟抢购余票的示例

一、示例代码:

python 复制代码
from threading import Thread
from threading import Lock
import time

n = 100                                    # 共100张票


def task():
    global n
    mutex.acquire()                         # 上锁
    temp = n
    time.sleep(0.1)
    n = temp - 1
    print('购票成功,剩余%d张余票!' % n)
    mutex.release()                         # 释放锁


if __name__ == '__main__':
    mutex = Lock()                          # 实例化Lock类
    thread_list = []                        # 初始化列表
    for i in range(100):
        t = Thread(target=task)             # 实例化线程类
        thread_list.append(t)               # 线程实例加入列表
        t.start()                           # 创建线程
    for t in thread_list:
        t.join()                            # 等待子线程结束

二、方法注释

threading模块中使用Lock类方便的处理锁定。Lock类的两个方法:acquire()上锁与release()释放锁。

三、代码说明:

创建100个线程,全部执行task函数,为解决资源竞争问题,使用mutex.acquire()方法实现资源的锁定,第一个获取资源的线程锁定后,其他线程等待mutex.release()解锁释放资源。所以每次只有一个线程执行task()函数。

四、运行结果:

相关推荐
circuitsosk几秒前
大规模离线数据管道构建:样本获取、清洗、加工与合成
人工智能·python·机器学习·搜索引擎
tang7778916 分钟前
分布式爬虫优化指南:如何用代理IP把采集效率提升300%
分布式·爬虫·python·tcp/ip·分布式爬虫·爬虫代理·代理ip
gwf21618 分钟前
Soft-RoCE与Soft-iWARP深度解析:无硬件RDMA学习环境搭建(零基础必知必会)
人工智能·python·tcp/ip·tcp·tcpdump
spider_xcxc23 分钟前
Jenkins 遇见 Argo CD:构建可靠 GitOps 流水线的实战指南
java·开发语言·servlet
AI行业学习30 分钟前
Claude Code + cc-switch + Git + Node.js 一站式完整安装配置教程【8.3】
git·python·安全·前端框架·node.js·html·notepad++
AI行业学习33 分钟前
Claude Code + cc-switch + Git + Node.js 一站式完整安装配置教程(2026最新·国内可用版)
人工智能·git·python·安全·node.js·html·notepad++
denggun1234535 分钟前
大大模型 如何通过 本地排雷 远端GPU
python·embedding·pip
IT小盘1 小时前
16-Prompt版本管理-从手工修改到可追踪配置系统
开发语言·人工智能·python·prompt
卷无止境1 小时前
Python进程池那些事儿:从原理到实战
后端·python
满怀冰雪1 小时前
15-Paddle 高层 API 入门:paddle.Model 的训练与评估流程
人工智能·python·深度学习·机器学习·paddle