千家信息网

Python主线程销毁子线程过程是怎样的

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Python主线程销毁子线程过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在处理完成后,Python主线程将
千家信息网最后更新 2026年11月03日Python主线程销毁子线程过程是怎样的

Python主线程销毁子线程过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在处理完成后,Python主线程将销毁线程,其实Python主线程的销毁与子线程的销毁是不同的,因为主线程的销毁动作必须要通过销毁Python的运行环境才可以生效,而子线程的销毁则不需要进行这些动作。

Python首先会通过PyThreadState_Clear清理当前线程所对应的线程状态对象。所谓清理,实际上比较简单,就是对线程状态对象中维护的东西进行引用计数的维护。随后,Python释放GIL,释放GIL的操作是在PyThreadState_DeleteCurrent中完成的。

在PyThreadState_DeleteCurrent中,首先会删除当前的线程状态对象,然后通过PyEval_ReleaseLock释放GIL。Python在函数PyThreadState_DeleteCurrent完成了绝大部分线程的销毁动作,剩下的PyThread_exit_thread是一个平台相关的操作,完成各个平台上不同的销毁原生线程的工作。在Win32下,实际上就是调用_endthread。

我们知道,Python的线程在GIL的控制之下,线程之间,对整个Python解释器,对Python提供的C API的访问,都是互斥的,这可以看作是Python内核级的互斥机制。但是这种互斥是我们不能控制的,我们还需要另一种可控的互斥机制--用户级互斥。内核级通过GIL实现的互斥保护了内核的共享资源,同样,用户级互斥保护了用户程序中的共享资源。考虑下面的例子:

[thread2.py]   import thread   import time   input = None  lock = thread.allocate_lock()   def threadProc():       while True:            print 'sub thread id : ', thread.get_ident()           print 'sub thread %d wait lock...' % thread.get_ident()           lock.acquire()           print 'sub thread %d get lock...' % thread.get_ident()           print 'sub thread %d receive input : %s' % (thread.get_ident(), input)           print 'sub thread %d release lock...' % thread.get_ident()           lock.release()           time.sleep(1)   thread.start_new_thread(threadProc, ())   print 'main thread id : ', thread.get_ident()   while True:       print 'main thread %d wait lock...' % thread.get_ident()       lock.acquire()       print 'main thread %d get lock...' % thread.get_ident()       input = raw_input()       print 'main thread %d release lock...' % thread.get_ident()       lock.release()       time.sleep(1)

在thread2.py中,有一个Python主线程和子线程之间共享的变量input。这个input是用户的输入,Python主线程接收输入,而子线程打印用户输入。为了保证子线程在用户输入之后才激活打印动作,thread2.py使用了Python线程机制提供的Lock机制来实现同步动作,这实际上也可以视为线程之间的互斥。

当主线程通过lock.acquire获得lock之后,将独享对input的访问权利。子线程会因为等待lock而将自身挂起,直到主线程释放lock之后才会被Python的线程调度机制唤醒,获得访问input的权力。注意,这里主线程需要使用sleep使自身挂起,才能触发Python的线程调度,使得子线程获得运行的机会。而这时主线程由于等待lock,同样会将自身挂起,不能再访问input。

  • 初次接触Python部署问题解析

  • 强大快捷的Python操作语言全解析

  • 对Python 调试器丰富资源介绍

  • 对Python交互式技巧总结之谈

  • 如何正确认识Python 源文件

于是,自始至终,每一个线程都能控制自己对input的使用,不用担心别的线程破坏input的状态。这种机制给了用户控制线程之间交互的能力,是Python中实现线程互斥和同步的核心。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

线程 用户 机制 动作 之间 状态 控制 输入 内核 实际 实际上 对象 资源 不同 共享资源 就是 平台 保护 同步 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 互联网是不是新科技 新华互联网科技学院 互联网科技作文 安徽鑫晟辉互联网科技 天津摩尔互联网科技 兼蜜互联网科技 互联网科技公司介绍 佰商互联网科技有限公司 互联网科技股午盘股票涨跌 互联网实体化科技化 中盈科技互联网信息有限公司 哈尔滨新华互联网科技学院 互联网系的金融科技公司 广州恒生互联网科技有限 重庆互联网医院沙龙医盟信息科技 彤创互联网科技有限公司 宝灵互联网科技有限公司 和信科技工业互联网 抖集互联网科技技术咨询 互联网巨头反垄断金融科技 深圳齐家互联网科技 奔汉互联网科技 湖南洣水互联网科技有限公司扣款 央行互联网金融科技公司 金融科技与互联网金融相同和不同 栖莱科技互联网股份有限公司 特约风豹互联网科技为什么扣费 互联网领先科技宣传片 小牛互联网科技有限公司地址
0