我是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个线程已经完成,但似乎程序没有退出(我没有得到命令提示符)。我认为这与我的代码没有属性结束线程有关。真的吗?如何解决这个问题? 感谢。
答案 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()
从外部停止它。您还可以杀死生成子线程的主线程:)