如何正确停止python线程?

时间:2013-10-14 16:21:41

标签: python multithreading

我是Python的新手。这是我的代码:

import logging
logging.basicConfig(level = logging.DEBUG, format = "[%(levelname)s] (%(threadName)-10s) %(message)s")
import threading
import time

def thread1():
    for i in range(0, 10, 2):
        logging.debug(i)
        time.sleep(1)


def thread2():
    for i in range(10, 20):
        logging.debug(i)
        time.sleep(1)

t1 = threading.Thread(name = "thread1", target = thread1)
t1.setDaemon(True)
t1.start()

t2 = threading.Thread(name = "thread2", target = thread2)
t2.setDaemon(True)
t2.start()

当我复制代码并将其粘贴到python命令行提示符中时,我得到了以下结果。

enter image description here

正如你所看到的,2个线程已经完成,但似乎程序没有退出(我没有得到命令提示符)。我认为这与我的代码没有属性结束线程有关。真的吗?如何解决这个问题? 感谢。

2 个答案:

答案 0 :(得分:4)

实际上,命令提示符在行>>> [DEBUG] (thread1 ) 2中返回并准备好输入更多内容。 deamon线程在后台运行,打印出他们应该的东西并最终完成。你根本不需要输入ctrl-c。你可能刚刚输入了另一个python命令。

答案 1 :(得分:0)

如果我没记错的话 - 你需要使用threading.Event来停止一个线程。例如:

self.stoprequest = threading.Event()

""" When self.stoprequest.set() is called,
it sets an event on the thread - stopping it.""" 
self.stoprequest.set()

因此,如果您在每个线程上创建一个threading.Event(),则可以使用instance.set()

从外部停止它。

您还可以杀死生成子线程的主线程:)