2011-10-05 191 views
1

有没有办法“暂停”应用程序的主python线程?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,并且可能有更好的方法。

+0

为什么你要启动另一个线程,如果你可以在主线程上执行一个额外线程的工作负载呢?换句话说,你为什么要创建两个线程,并希望让主线程等待,而不是只产生一个线程并在主线程上运行Thread2的工作负载? –

+0

对于空循环体,'pass'会比'None'更有意义。 –

回答

4

如果您不在线程上执行setDaemon(True),只要线程运行,进程就会继续运行。

守护进程标志指示解释器不需要等待线程。只有守护进程线程退出时它将退出。

4

使用join

Thread1.join() 
Thread2.join() 

还要注意的是setDaemon是旧的API。

Thread1.daemon = True 

是现在的首选方式。

+0

它会忽略Ctrl-c,但Ctrl- \(SIGQUIT)仍可用于终止程序。 – unutbu

4

守护线程的整点是而不是如果任何应用程序仍在运行,请阻止应用程序终止。你显然希望你的线程保持应用程序的活动,所以不要让它们成为守护进程。