【问题标题】:Python pause thread executionPython暂停线程执行
【发布时间】:2011-10-05 20:20:40
【问题描述】:

有没有办法永久“暂停”应用程序的主 python 线程?

我有一些代码会触发两个线程

class start():
    def __init__(self):
        Thread1= functions.threads.Thread1()
        Thread1.setDaemon(True)
        Thread1.start()
        Thread2= functions.threads.Thread2()
        Thread2.setDaemon(True)
        Thread2.start()

        #Stop thread here

此刻,当程序到达该函数的末尾时,它退出(此后主线程无事可做),杀死无限运行的线程(循环)。如何阻止主进程退出?我可以使用while True: None 循环来做到这一点,但这会占用大量 CPU,并且可能有更好的方法。

【问题讨论】:

  • 如果您可以在主线程上执行一个额外线程的工作负载,为什么还要启动另一个线程?换句话说,你为什么要创建两个线程并想让主线程等待,而不是仅仅产生一个线程并在主线程上运行 Thread2 的工作负载?
  • 对于空循环体,passNone 更有意义。

标签: python python-multithreading


【解决方案1】:

如果你不对线程执行setDaemon(True),只要线程运行,进程就会一直运行。

守护进程标志表明解释器不需要等待线程。当只剩下守护线程时,它将退出。

【讨论】:

    【解决方案2】:

    使用join:

    Thread1.join()
    Thread2.join()
    

    另请注意,setDaemon 是旧 API。

    Thread1.daemon = True
    

    现在是首选方式。

    【讨论】:

    • 它确实忽略了 Ctrl-c,但是 Ctrl-\ (SIGQUIT) 仍然可以用来终止程序。
    【解决方案3】:

    守护线程的全部意义在于阻止应用程序在它们中的任何一个仍在运行时被终止。您显然希望您的线程保持应用程序进程处于活动状态,因此不要让它们成为守护进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-19
      • 2011-12-27
      • 2021-05-29
      • 1970-01-01
      • 2015-10-21
      • 2015-03-05
      • 2020-08-19
      • 2016-03-21
      相关资源
      最近更新 更多