Python中的守护线程是什么(如何理解和使用?)

通过小例子和实际示例了解什么是守护线程,以及如何在 Python 中设置守护线程。
在本教程中,你将理解什么是 Python 中的守护线程以及如何设置它们,你应该对本教程中的线程有基本的了解。
Python中的守护线程是什么?守护线程是在主线程死亡时死亡的线程,也称为非阻塞线程。通常,主线程应该等待其他线程完成才能退出程序,但是如果你设置了守护进程标志,你可以让线程做它的工作而忘记它,当程序退出时,它会被杀死自动地。
这在许多情况下都很有用,假设你正在执行一些网络抓取任务,并且你想要创建一个线程,每当你正在抓取的特定网站中插入新项目时,它都会在电子邮件中提醒你。
另一个示例,你可能希望创建一个线程来监视程序中的日志文件,并在发生严重错误时提醒你。
Python如何理解守护线程?在本教程的最后,我们将与你分享一些我们发现对使用守护线程很有用的教程。
既然知道了守护线程是什么,也知道它的用处,那我们举个Python守护线程示例,下面的代码启动一个非守护线程并启动它,然后我们也结束了主线程:

import threading import timedef func(): while True: print(f"[ {threading.current_thread().name}] Printing this message every 2 seconds") time.sleep(2)# initiate the thread to call the above function normal_thread = threading.Thread(target=func, name="normal_thread") # start the thread normal_thread.start() # sleep for 4 seconds and end the main thread time.sleep(4) # the main thread ends

func()函数应该永远运行,因为我们设置Truewhile循环的条件。启动该线程后,我们在主线程中进行简单的睡眠并退出程序。
Python中的守护线程是什么?但是,如果你运行它,你会看到该程序一直在运行并且不允许你退出(仅当你关闭窗口时):
[ normal_thread] Printing this message every 2 seconds [ normal_thread] Printing this message every 2 seconds [ normal_thread] Printing this message every 2 seconds [ normal_thread] Printing this message every 2 seconds [ normal_thread] Printing this message every 2 seconds ...goes forever

【Python中的守护线程是什么(如何理解和使用?)】因此,非守护线程使程序在完成之前拒绝退出。
Python如何理解守护线程?下面的例子这次启动了一个守护线程:
import threading import timedef func_1(): while True: print(f"[ {threading.current_thread().name}] Printing this message every 2 seconds") time.sleep(2)# initiate the thread with daemon set to True daemon_thread = threading.Thread(target=func_1, name="daemon-thread", daemon=True) # or # daemon_thread.daemon = True # or # daemon_thread.setDaemon(True) daemon_thread.start() # sleep for 10 seconds and end the main thread time.sleep(4) # the main thread ends

在以上的Python守护线程示例中,现在我们传递daemon=Truethreading.Threadclass 以表明它是一个守护线程,你还可以访问该daemon属性True或使用该setDaemon(True)方法。
让我们执行程序:
[ daemon-thread] Printing this message every 2 seconds [ daemon-thread] Printing this message every 2 seconds

这次一旦主线程完成其工作,守护线程也会自动被杀死并退出程序。
真实例子以下是我们使用守护线程完成任务的一些教程:
  • 在 Python 中制作键盘记录器:一个守护线程,用于将键盘记录发送到我们的电子邮件或保存到文件。
  • 在 Python 中制作端口扫描器:多个守护线程来扫描端口。
  • 使用 Python 暴力破解 FTP 服务器:多个守护线程尝试 FTP 登录。
  • 用 Python 制作一个聊天应用程序:一个守护线程,它监听来自网络的即将到来的消息,并将它们打印到控制台。

    推荐阅读