Python线程重复执行问题: 为什么程序执行结束时打印了多个“Thread-5”,却只有一个线程真正执行了?

小敏吖_1065

小敏吖_1065

2024-11-03

942人浏览

原创

python线程重复执行问题: 为什么程序执行结束时打印了多个“thread-5”,却只有一个线程真正执行了?

python线程重复执行

问题:

为什么程序执行结束时打印了多个“thread-5”,看起来线程5重复执行了?去掉sub()函数中的time.sleep(1)后,为什么程序又可以正常执行,每个线程按顺序执行?

回答:

python-docx
python-docx

python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集

下载

程序中重复执行sub()函数的线程是线程5的原因在于:

  • for循环创建了5个线程,其中最后一个线程的名称为“thread-5”。
  • sub()函数使用了一个全局变量t, 该变量存储了当前正在执行sub()函数的线程。
  • 在sub()函数中,t全局变量始终是线程5,因为循环5次后,t变量的值永远指向“thread-5”线程。因此,所有线程都打印“thread-5”。

去除time.sleep(1)后,程序可以正常运行,每个线程按顺序执行,原因如下:

  • 由于time.sleep(1)的移除,线程5不会被阻塞,从而允许其他线程有机会执行并更新t全局变量。
  • 每个线程 now都更新了t全局变量,指向正确的线程名称,从而正确打印线程名称。

正确的程序代码:

import threading, time

num = 5
lock = threading.Lock()     # 创建同步锁
# L = []


def sub():
    global num
    print('sub %s' % t.name)
    lock.acquire()      # 获得同步锁:不让别的线程在同一时刻运行
    print(threading.current_thread().getName())
    temp = num
    # time.sleep(1)
    num = temp - 1
    lock.release()      #解除同步锁
    print('%s ' % t.name, num)


for i in range(5):
    t = threading.Thread(target=sub)
    t.start()
    print('start %s' % t.name)
    # L.append(t)

# for T in L:
#     T.join()

print('s', num)

此代码确保每个线程按顺序打印其名称和更新的num值。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

2025.09.18

3545

12

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

2025.09.18

1450

13

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

2026.03.17

179

17

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

3398

6

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

2025.12.01

503

16

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

0

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

180

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程