python 守护线程运用_Python多线程Threading、子线程与守护线程实例详解

线程Threading:

python中多线程需要使用threading模块

线程的创建与运行:

1.直接调用threading的Thread类:

线程的创建:线程对象=thread.Thread(target=函数名,args=(参数))【补充,由于args是一个元组,单个参数时要加“,”】

线程的启动:线程对象.start(),调用start(),那么线程对象会自动去调用thread.Thread中的run()

让主线程等待其余线程结束:线程对象.join(),加了join之后,相当于阻塞了主线程,主线程只有当join的线程结束后才会向下执行

import threading,time

def run(n):

time.sleep(1)

print("task ",n)

t1=threading.Thread(target=run,args=("t1",))

t2 = threading.Thread(target=run,args=("t2",))

start_time=time.time()#开始时间

t1.start()

t2.start()

##因为是独立线程,如果想要主线程等待其他线程运行完毕,需要使用join

t1.join()

t2.join()

spend_time=time.time()-start_time

print(spend_time)##1.0多,说明是并行的结果

附加说明--join是阻塞等待:

import threading,time

class MyTread(threading.Thread):

def __init__(self,name):

super(MyTread,self).__init__()#调用父类的__init__()

self.name=name

def run(self):#重写方法,按自己的要求去写

time.sleep(1)

print("run in task",self.name,threading.current_thread(),threading.active_count())

t1=MyTread("t1")

t2=MyTread("t2")

start_time=time.time()

t1.start()

t2.start()

t1.join()

t2.join()

time.sleep(1)###主线程等待其余线程结束

print(time.time()-start_time)

#结果是2.0多,证明是join是相当于阻塞了主线程的执行,只有当线程结束后才会向下执行

2.继承threading的Thread类:

继承threading的Thread类的类要主要做两件事:

1.如果不做自定义变量的初始化,那么可以直接使用继承的父类的__init__(),如果需要做自定义变量的初始化,则需要先调用父类的__init__()【否则需要自己填写线程初始化相关的参数】

2.重写run,虽然继承了父类的run,但实际上如果不重写,那么我们继承threading的Thread类又有什么意义呢?为什么不直接调用threading的Thread类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值