300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python守护多线程_Python多线程Threading 子线程与守护线程实例详解

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

时间:2022-06-18 10:27:35

相关推荐

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类

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。