4

我是 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 命令行提示符中时,我得到了以下结果。

在此处输入图像描述

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

4

2 回答 2

4

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

于 2013-10-14T16:52:14.410 回答
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() 从外部停止它

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

于 2013-10-14T16:52:54.600 回答