Python 守护线程

Python 守护线程

有时需要在后台执行任务。守护线程是用于后台任务的一种特殊类型的线程,称为 守护线程 。换句话说,守护线程在后台执行任务。

值得注意的是,守护线程执行的是非关键任务,尽管这些任务对应用程序可能有用,但如果它们失败或在操作过程中被取消,不会对它造成影响。

此外,守护线程无法控制其何时被终止。一旦所有的非守护线程完成,程序将终止,即使此时仍有守护线程在运行。

这是守护线程和非守护线程之间的一个重要区别。只有守护线程在运行时,进程才会退出;而如果至少有一个非守护线程在运行,进程将无法退出。

守护线程 非守护线程
如果只有守护线程在运行(或者没有线程在运行),进程将退出。 如果至少有一个非守护线程在运行,进程将不会退出。

创建守护线程

要创建守护线程,您需要将 daemon 属性设置为 True。

t1=threading.Thread(daemon=True)

如果创建一个没有任何参数的线程对象,也可以在调用start()方法之前将其守护属性设置为True。

t1=threading.Thread()
t1.daemon=True

示例

请看下面的示例:

from time import sleep
from threading import current_thread
from threading import Thread

# function to be executed in a new thread
def run():

   # get the current thread
   thread = current_thread()
   # is it a daemon thread?
   print(f'Daemon thread: {thread.daemon}')

# create a new thread
thread = Thread(target=run, daemon=True)

# start the new thread
thread.start()

# block for a 0.5 sec for daemon thread to run
sleep(0.5)

它将产生以下 输出

Daemon thread: True

守护线程可以执行支持程序中的非守护线程的任务。例如 –

  • 在后台创建一个存储日志信息的文件。

  • 在后台执行网络爬虫。

  • 在后台自动将数据保存到数据库中。

示例

如果运行中的线程被配置为守护线程,则会引发RuntimeError。请参考以下示例:

from time import sleep
from threading import current_thread
from threading import Thread

# function to be executed in a new thread
def run():
   # get the current thread
   thread = current_thread()
   # is it a daemon thread?
   print(f'Daemon thread: {thread.daemon}')
   thread.daemon = True

# create a new thread
thread = Thread(target=run)

# start the new thread
thread.start()

# block for a 0.5 sec for daemon thread to run
sleep(0.5)

它将产生以下输出 –

Exception in thread Thread-1 (run):
Traceback (most recent call last):
. . . .
. . . .
   thread.daemon = True
   ^^^^^^^^^^^^^
 File "C:\Python311\Lib\threading.py", line 1219, in daemon
  raise RuntimeError("cannot set daemon status of active thread")
RuntimeError: cannot set daemon status of active thread

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程