2011-07-14 153 views
1

我正在写一些简单的代码,我使用Pygame来绘制图形,并且我有一个线程可以绘制一切。当我调用sys.exit()或只是按Ctrl + C时,主程序退出,但线程似乎仍然活着。我想我需要关闭它。我怎么做?如何退出一个运行线程的Python程序?

例子:

import threading 

class Bla(threading.Thread): 
    def run(self): 
     print "I draw here" 

Bla().start() 

while True: 
    if user_wants_to_end: 
     sys.exit() 

当我确实想退出程序不会退出!我如何关闭线程?

+4

“Simple code”和“thread”在同一句中? Tsk,tsk。不要使用多线程,因为它似乎是个好主意,在实际需要时使用它。 –

+1

这看起来像是重复的;你可能想看看[这里](http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python/325528#325528)寻求帮助。 – myusuf3

+0

这个程序并不完全显示你的问题,因为它退出的速度很快。但是,如果在run()方法中添加诸如'time.sleep(1000000)'之类的东西,则可以说明问题。 – EOL

回答

1

当所有非守护线程完成时,Python程序退出。

class Bla(threading.Thread): 
    daemon = True # Make the thread daemon 
    def run(self): 
     print "I draw here" 
+0

仅供参考:“当没有活动的非守护程序线程被留下时,整个Python程序退出。” (线程模块文档)。 – EOL

+0

难道没有办法让线程从主程序中终止,而没有在线程代码中专门处理这个问题吗? – EOL

+0

我很确定答案是否定的。您可以使用一个进程(请参阅多处理器)或在您的线程代码中进行显式检查(通常使用事件)。 – lazy1

相关问题