Python多线程中守护线程使用教程

文本介绍了Python多线程中的守护线程使用方法。

Python守护线程简介

在 Python 中,每个程序至少有一个线程,称为主线程。要创建一个具有多个线程的程序,可以使用线程模块。通过使用多个线程,可以并发执行任务。

有时,可能希望在后台执行任务。为此,可以使用一种称为守护线程的特殊线程

根据定义,守护线程是后台线程。换句话说,守护线程在后台执行任务。

守护线程有助于执行程序中支持非守护线程的任务。例如:

  • 在后台将信息记录到文件中。
  • 在后台从网站中删除内容。
  • 在后台自动将数据保存到数据库中。

创建守护线程

要创建守护线程,可以在Thread构造函数中将daemon设置为True

<span style="background-color:#f8f8f8"><span style="color:#212529"><code class="language-python">t = Thread(target=f, deamon=<span style="color:#6cb6ff">True</span>)</code></span></span>

或者,可以在创建Thread的实例后将daemon属性设置为True

t = Thread(target=f)
t.deamon = True

守护线程示例

下面的例子展示了如何创建一个非守护线程来显示程序等待的秒数:

from threading import Thread
import time
def show_timer():
count = 0
while True:
count += 1
time.sleep(1)
print(f'Has been waiting for {count} second(s)...')
t = Thread(target=show_timer)
t.start()
answer = input('Do you want to exit?\n')

首先,定义一个函数show_timer()来显示程序等待的秒数。

其次,创建一个执行show_timer()函数的新线程:

<span style="background-color:#f8f8f8"><span style="color:#212529"><code class="language-python">t = Thread(target=show_timer)</code></span></span>

三、启动线程:

<span style="background-color:#f8f8f8"><span style="color:#212529"><code class="language-python">t.start()</code></span></span>

最后调用input()提示用户输入的函数:

<span style="background-color:#f8f8f8"><span style="color:#212529"><code class="language-python">answer = <span style="color:#f69d50">input</span>(<span style="color:#96d0ff">'Do you want to exit?\n'</span>)</code></span></span>

如果运行该程序,它将显示以下输出并永远运行。

Do you want to exit?Has been waiting for 1 second(s)...
Has been waiting for 2 second(s)...
Has been waiting for 3 second(s)...
Has been waiting for 4 second(s)...
Y
Has been waiting for 5 second(s)...
Has been waiting for 6 second(s)...

要终止程序,需要终止终端。

该程序无限期运行,因为该线程t是非守护线程,该程序需要等待所有非守护线程完成才能退出。

现在,让我们把线程变成守护线程:

from threading import Thread
import time
def show_timer():
count = 0
while True:
count += 1
time.sleep(1)
print(f'Has been waiting for {count} second(s)...')
t = Thread(target=show_timer, daemon=True)
t.start()
answer = input('Do you want to exit?\n')

如果您运行该程序,输入一些内容,然后按回车键,该程序将终止。例如:

Do you want to exit?
Has been waiting for 1 second(s)...
Y

程序终止是因为它不需要等待守护线程完成。此外,守护线程在程序退出时自动终止。

守护线程与非守护线程

下表说明了守护线程和非守护线程之间的区别:

守护线程非守护线程
线程创建t = Thread(target=f, daemon=True)t = Thread(target=f)
程序退出前需要等待
任务种类非重要任务重要任务

概括

  • 守护线程是后台线程。
  • 守护线程对于执行不重要的任务很有用。
  • 程序可以退出,不需要等待守护线程完成。
  • 当程序退出时,守护线程会自动终止。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值