藏猊 2021-09-30 11:26 采纳率: 57.1%
浏览 24
已结题

python多线程学习中遇到了很奇怪的代码

代码如下:

import _thread
import time


# 为线程定义一个函数
def print_time(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print("%s: %s" % (threadName, time.ctime(time.time())))


# 创建两个线程
try:
    _thread.start_new_thread(print_time, ("Thread-1", 1,))
    _thread.start_new_thread(print_time, ("Thread-2", 2,))
except:
    print("Error: 无法启动线程")

while 1:
    pass


网上找的代码,最后的while循环让我非常困惑,这是怎么做到运行的?

  • 写回答

3条回答 默认 最新

  • 给你骨质唱疏松 2021-09-30 11:36
    关注

    最后的while循环是为了让主线程(进程)卡在原地, 这样可以看到两个子线程的完整输出, 如果没有while卡在这里,主线程(进程)就结束了, 子进程随即销毁,就看不到输出结果

    另外开启多线程应该很少使用这种方式吧

    有一个 Thread 类有完整的开启子线程的功能, 使用 .start() 方法来开启一个子线程, 使用 .join() 方法主线程会等待子线程执行完毕输出结果后结束, 并不需要手动写 while 来让整个程序卡在原地,这并不符合实际

    示例:

    from threading  import Thread,current_thread  
    import os
    
    n = 100
    def task(name):
        global n
        n = 22
        print(f"子线程 : {name} {os.getpid()} {current_thread().name} {n}")
    
    if __name__ == '__main__':
        p = Thread(target=task,args=("派大星",))
        p.start()
        p.join()
        print(f"主线程 : {os.getpid()} {current_thread().name} {n}")
    
    '''输出
    子线程 : 派大星 120 Thread-1 22
    主线程 : 120 MainThread 22
    '''
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月8日
  • 已采纳回答 9月30日
  • 创建了问题 9月30日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?