风云2015 2021-09-18 02:01 采纳率: 84.2%
浏览 68
已结题

python3 会自动释放长期不用的线程吗?

请问,如果用了多线程,有些线程代码运行完了之后,长时间没再运行,比如1天时间,会自动释放吗?

具体案例如下,在一个Python 文件中,有如下代码


def custom():
     # 省略代码块


def on_mesage():

      #省略代码块

      t = threading.Tread(target = custom)
      t.start()

      # 省略代码块

在上面这个代码块中,on_mesage() 一直在循环运行,类似 while true 的循环语句,on_mesage() 中我加了一个线程 ,运行 custom 函数。也就是说,on_mesage() 每循环运行一次,都会新起一个线程运行 custom() 函数。我的疑问是,每次循环运行都创建的新线程,会在custom()函数运行完毕后而自动关闭吗?

  • 写回答

2条回答 默认 最新

  • 於黾 2021-09-18 02:02
    关注

    线程在退出时就已经释放了
    我不知道你需要释放的到底是什么玩意
    代码是肯定不会释放的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    风云2015 2021-09-18 04:53

    已经更新了问题,请大侠看看,谢谢

    回复
    於黾 回复 风云2015 2021-09-18 05:37

    首先要明确的是,所谓线程,那是cpu层面的东西,是cpu到底用当前线程去执行你的代码还是另一个线程去执行你的代码。
    这样说可能有点抽象,打个比方吧,假如你就是CPU,你手里有一堆活要做,那么领导继续给你分配活的时候会告诉你:1.干完手上的活之后再干下一个活。2.这个活比较急,抽空先干了。那么第二个活其实就是另一个线程,cpu还是那些cpu,但是干活的顺序变了一下。活干完了你还在不在呢,那是当然在的。也就是cpu本身不会被释放掉,它是硬件。
    那么所谓线程执行完了,到底是什么东西没了呢?其实就是资源。
    而资源,落实到你的代码里,其实就是你的函数里面申请的那些内存、IO、端口之类的。
    当你的函数执行完毕,正常退出了之后,你的那些资源到底会不会自动释放,这是不一样的。
    托管资源,比如class、list、int这些会定期释放,即使你代码里手动将它们用过之后设置成None,一般来说它也暂时还在内存里。这是为了执行效率所做的优化。否则每声明一个变量当用完之后都得去删除它那效率是很低的,如果定时清理没有引用的资源效率就比较高。所以你盯着任务管理器看内存使用情况,经常会起起落落的。
    如果是非托管资源,比如数据库连接,文件句柄,以太网连接,绘图句柄等等,需要你代码里有显式的释放语句,否则它就常驻内存了。

    1
    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月18日
  • 修改了问题 9月18日
  • 创建了问题 9月18日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部