Python非守护程序线程是非分离线程吗?什么时候它的资源被释放了?

时间:2013-07-26 18:47:35

标签: python multithreading python-2.7 subprocess

一旦线程完成,非守护程序线程的资源是否会释放回操作系统?即如果主线程没有在这些非守护程序线程上调用join(),那么python GC是否会调用它们并释放一次由该线程保存的资源?

2 个答案:

答案 0 :(得分:2)

如果你生成一个运行一个函数的线程,然后该函数在程序结束之前完成,那么是的,一旦线程(a)不再运行,线程将被垃圾收集,并且(b)不再由其他任何东西引用。

答案 1 :(得分:1)

  

”   线程可以标记为“守护程序线程”。这个的意义   flag是只有守护进程线程时整个Python程序退出   离开了。初始值继承自创建线程。该   可以通过守护进程属性设置flag。   注意守护程序线程在关闭时突然停止。他们的资源   (如打开文件,数据库事务等)可能无法发布   正常。如果你想让你的线程优雅地停止,那就制作它们吧   非守护进程并使用合适的信令机制,如事件。   “ - Python Thread Docs

Python会清除守护进程,非守护程序线程不会 - 您必须发出停止信号。这在执行一些复杂的并行代码时非常有用:) 这确实意味着,如果您使用非守护程序线程,您可以随意使用虚拟/无用线程来手动清理。

tl; dr非守护线程永远不会“完成”你必须通过你自己的机制或其中一个SIGS来表示它们完成。 SIGTERM。