python多线程

多线程初步了解

#创建一个简单的线程
t = threading.Timer(3,demo,args=(1,))
t2 = threading.Timer(4,demo,args=(2,))
#启动线程,3秒之后调用函数
t.start()
t2.start()
time.sleep(7)  #如果没有该指令,则不会打印,因为时间超过3秒,线程会被取消
print(t.name)      #线程的名称
print(t.ident)      #线程的标识符
t.cancel()

线程的join方法

from threading import Thread
import time
import datetime
'''
线程的join方法用来等待被调用线程结束或者超时后继续执行当前线程的后续代码
'''
def func1(x,y):
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    for i in range(x,y):
        print(i,end=' ')
    print()
    time.sleep(10)

t1 = Thread(target=func1,args=(5,10))
t1.start()
t1.join(5)                              #等待t1运行结束或者等待5s,与time.sleep(5)效果相似
# time.sleep(5)

t2 = Thread(target=func1,args=(1,5))
t2.start()
2020-07-26 22:07:24
5 6 7 8 9 
2020-07-26 22:07:29
1 2 3 4 

线程的状态检测

import time
from threading import Thread
def func():
    print('AAA...')
    time.sleep(10)

# t1 = Thread(target=func())
t1 = Thread(target=func)            #创建线程
print('t1:',t1.is_alive())          #线程还未开启,返回False
t1.start()
print('t1:',t1.is_alive())          #线程开启 返回 True
t1.join(5)                          #join方法应超时而结束,即已经超过5s,不等待线程运行结束 直接运行后面的代码,此时线程还在运行
print('t1:',t1.is_alive())          #线程还在运行,返回True
t1.join()                           #等待线程结束
print('t1:',t1.is_alive())          #线程结束 返回False

t1: False
AAA...
t1: True
t1: True
t1: False

线程的daemon属性

若在主线程中创建子线程,当主线程结束时会根据子线程的daemon属性来决定是否结束子线程,False会等待子线程结束之后在结束

class mythread(threading.Thread):
    def __init__(self,num,name):
        threading.Thread.__init__(self,name=name)
        self.num=num

    #重写run方法
    def run(self):
        time.sleep(self.num)
        print(self.num)

t1 = mythread(1,'t1')
t2 = mythread(5,'t2')
t2.daemon = True
print(t1.daemon)
print(t2.daemon)
t1.start()
t2.start()

False
True
1

可以看到,实际打印并没有打印5,因为修改了t2的daemon属性为True,导致在t1结束之后主线程就结束了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值