Python学习笔记之:使用 threading.Thread()来进行多线程编程 / setDaemon进行线程守护

1. 单线程

import threading
import time


def dance():
    for i in range(5):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


def sing():
    for i in range(5):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


if __name__ == '__main__':
    dance()
    sing()

为了方便演示,我在每一个打印的后面加了时间戳
在这里插入图片描述
因为这个过程只使用了主线程,所以,整个过程的时间是两个过程的叠加,为10s。

2. 多线程:threading.Thread() + threading.start()

import threading
import time

def dance():
    for i in range(5):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


def sing():
    for i in range(5):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


if __name__ == '__main__':
    thread_1 = threading.Thread(target=dance)
    thread_1.start()
    sing()

在这里插入图片描述

这里除了主程序(主线程)之外,还启动了thread1线程,这样可以实现两个线程同时工作,从结果可以看出,只用了5s的时间就完成了全部的工作。

3. 守护线程:threading.Thread().setDaemon

守护线程,指的是通过对主线程之外的其他子线程进行限制,达到 “当主线程退出的时候,其他线程无论是否执行完,都强制退出” 的目的。这里的守护,指的是其他线程守护主线程。

3.1 未使用守护线程

import threading
import time

def dance():
    for i in range(15):   ##这里让子线程执行的次数增多,为了让效果更清晰一些
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


def sing():
    for i in range(5):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


if __name__ == '__main__':
    thread_1 = threading.Thread(target=dance)
    thread_1.start()
    sing()
    exit()

在这里插入图片描述

3.2 使用线程守护

import threading
import time

def dance():
    for i in range(15):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


def sing():
    for i in range(5):
        time_ = time.time()
        current_time = time.localtime(time_)[0:6]
        print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
        time.sleep(1)


if __name__ == '__main__':
    thread_1 = threading.Thread(target=dance)
    thread_1.setDaemon(True) ## 在start之前设置线程守护为True
    thread_1.start()
    sing()
    exit()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

暖仔会飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值