为什么主线程等待后台线程完成

莱纳斯

鉴于以下代码:

from threading import Thread

def dosomething():
    for _ in range(100):
        print("background thread running")


t = Thread(target=dosomething)
t.start()

只要后台线程需要完全通过循环,程序就会运行。我的问题是,为什么主线程等待后台线程完成并且在启动后台线程后不立即退出。

平谷

因为事情就是这样。threading文档

一个线程可以被标记为“守护线程”。这个标志的意义在于,当只剩下守护线程时,整个 Python 程序就会退出。初始值是从创建线程继承的。该标志可以通过 daemon 属性或 daemon 构造函数参数设置。

我假设您python my_script.py在命令行上运行了类似东西,并想知道为什么在工作线程完成之前它不会将您返回到提示?

好吧,如果您将代码更改为:

from threading import Thread

def dosomething():
    for _ in range(100):
        print("background thread running")


t = Thread(target=dosomething, daemon=True)
t.start()

你会发现你回到了终端。但是,您的守护进程线程也会终止(再次来自文档):

注意守护线程在关机时突然停止。他们的资源(如打开的文件、数据库事务等)可能无法正常释放。如果您希望您的线程正常停止,请将它们设为非守护进程并使用合适的信号机制,例如事件。

这是因为终止程序意味着终止进程,并且由于该工作线程由该进程处理,因此它会死亡 - 请尝试这篇文章以获得更全面的解释。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么主线程在继续之前要等待另一个线程完成?

来自分类Java

使主线程等待其他线程完成

来自分类Java

为什么主线程不等待其他异步进程(线程)来完成。ALLOFF工作不正常

来自分类Dev

如果 EDT 是一个单独的线程,为什么在这个例子中 invokeLater 等待主线程完成?

来自分类Dev

使线程从主线程等待

来自分类Java

如何使主线程等待执行程序服务线程完成

来自分类Dev

主线程不等待所有ThreadPoolExecutor线程完成

来自分类Java

等待主线程,直到其他线程未完成!

来自分类Dev

如何使主线程等待所有线程完成

来自分类Dev

从主线程到后台

来自分类Dev

当所有其他线程在主线程之前完成时,为什么仍然需要.join?

来自分类Dev

为什么pthread_join不会阻塞并等待线程完成?

来自分类Dev

Main方法等待执行中的线程完成。为什么?

来自分类Dev

UI线程如何等待后台线程完成处理?

来自分类Dev

为什么要在主线程上订阅?

来自分类Java

为什么ForkJoinPool ::的invoke()阻塞主线程?

来自分类Java

为什么主线程不被终止

来自分类Java

为什么invokeLater的主线程中执行?

来自分类Java

为什么工作的AsyncTask主线程?

来自分类Dev

为什么Future会阻塞主线程?

来自分类Dev

为什么任务在主线程中运行?

来自分类Dev

为什么不在最低级别等待时主线程被保留?

来自分类Dev

为什么主线程还调用线程池的execute()方法?

来自分类Dev

为什么在回调中线程变为主线程?

来自分类Dev

为什么我们在异步函数中在主线程上调用完成?

来自分类Dev

主线程或后台线程解析 swift

来自分类Java

从后台线程在主线程上调用函数

来自分类Dev

主线程与后台线程上的 CompletionHandler 行为

来自分类Dev

使用主线程和后台线程

Related 相关文章

  1. 1

    为什么主线程在继续之前要等待另一个线程完成?

  2. 2

    使主线程等待其他线程完成

  3. 3

    为什么主线程不等待其他异步进程(线程)来完成。ALLOFF工作不正常

  4. 4

    如果 EDT 是一个单独的线程,为什么在这个例子中 invokeLater 等待主线程完成?

  5. 5

    使线程从主线程等待

  6. 6

    如何使主线程等待执行程序服务线程完成

  7. 7

    主线程不等待所有ThreadPoolExecutor线程完成

  8. 8

    等待主线程,直到其他线程未完成!

  9. 9

    如何使主线程等待所有线程完成

  10. 10

    从主线程到后台

  11. 11

    当所有其他线程在主线程之前完成时,为什么仍然需要.join?

  12. 12

    为什么pthread_join不会阻塞并等待线程完成?

  13. 13

    Main方法等待执行中的线程完成。为什么?

  14. 14

    UI线程如何等待后台线程完成处理?

  15. 15

    为什么要在主线程上订阅?

  16. 16

    为什么ForkJoinPool ::的invoke()阻塞主线程?

  17. 17

    为什么主线程不被终止

  18. 18

    为什么invokeLater的主线程中执行?

  19. 19

    为什么工作的AsyncTask主线程?

  20. 20

    为什么Future会阻塞主线程?

  21. 21

    为什么任务在主线程中运行?

  22. 22

    为什么不在最低级别等待时主线程被保留?

  23. 23

    为什么主线程还调用线程池的execute()方法?

  24. 24

    为什么在回调中线程变为主线程?

  25. 25

    为什么我们在异步函数中在主线程上调用完成?

  26. 26

    主线程或后台线程解析 swift

  27. 27

    从后台线程在主线程上调用函数

  28. 28

    主线程与后台线程上的 CompletionHandler 行为

  29. 29

    使用主线程和后台线程

热门标签

归档