繁体   English   中英

如何正确停止python线程?

[英]How to properly stop python threads?

我是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个线程已经完成,但似乎程序没有退出(我没有得到命令提示符)。 我认为这与我的代码没有属性结束线程有关。 真的吗? 如何解决这个问题? 谢谢。

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

如果我没记错的话 - 你需要使用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()从外部停止它

你也可以杀死生成子线程的主线程:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM