线程
我的线程
import threading,time
class Main(object):
def __init__(self):
pass
def main(self):
t1=Mythread("t1")
t2=Mythread("t2")
t1.start()
t2.start()
# t1.run()
# t2.run()
class Mythread(threading.Thread):
def __init__(self,Tname):
super(Mythread,self).__init__()
self.Tname=Tname
def run(self):
print("task",self.Tname)
time.sleep(2)
if __name__ == '__main__':
Main().main()
启动50个线程,程序本来就是一个线程(主线程):51个
- 主线程和子线程是并行的
import threading,time
class Main(object):
Tread_List=[]
def __init__(self):
pass
def main(self):
# t1=Mythread("t1")
# t2=Mythread("t2")
# t1.start()
# t2.start()
# t1.run()
# t2.run()
start_time = time.time()
for i in range(10):
t=Mythread("t-%s"%i)
t.start()
Main.Tread_List.append(t)
pass
stop_time = time.time()
print(stop_time - start_time)
class Mythread(threading.Thread):
def __init__(self,Tname):
super(Mythread,self).__init__()
self.Tname=Tname
def run(self):
print("task",self.Tname)
time.sleep(5)
if __name__ == '__main__':
Main().main()
Process finished with exit code 0
运行结果:
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /Users/li/Desktop/pythonproject/线程thread.py
task taskt-0
t-1
task t-2
task t-3
task t-4
task t-5
task t-6
task t-7
task t-8
task t-9
0.0033111572265625
耗时0.0033111572265625秒,而子线程至少耗时5秒,说明子线程不影响主线程的运行二者并行
将线程添加入列表中,计算子线程耗时,使用join函数
join()使得在子线程运行完之前,主线程等待子线程运行
import threading,time
class Main(object):
Tread_List=[]
def __init__(self):
pass
def main(self):
# t1=Mythread("t1")
# t2=Mythread("t2")
# t1.start()
# t2.start()
# t1.run()
# t2.run()
start_time = time.time()
for i in range(10):
t=Mythread("t-%s"%i)
t.start()
Main.Tread_List.append(t)
for t in Main.Tread_List:
t.join()
pass
stop_time = time.time()
print(stop_time - start_time)
class Mythread(threading.Thread):
def __init__(self,Tname):
super(Mythread,self).__init__()
self.Tname=Tname
def run(self):
print("task",self.Tname)
time.sleep(5)
if __name__ == '__main__':
Main().main()
运行结果:
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /Users/li/Desktop/pythonproject/线程thread.py
task t-0
task t-1
task t-2
task t-3
task t-4
task t-5
task t-6
task t-7
task t-8
task t-9
5.006242036819458
Process finished with exit code 0
守护线程
什么是守护线程?
守护线程是目的线程的奴隶,主人消亡,奴隶消亡。
将上面的10个线程变为主线程的守护线程:
setDaemon(True) #把当前线程设置为守护线程
- 主线程结束–>子线程被强制结束(中断)
import threading,time
class Main(object):
Tread_List=[]
def __init__(self):
pass
def main(self):
# t1=Mythread("t1")
# t2=Mythread("t2")
# t1.start()
# t2.start()
# t1.run()
# t2.run()
start_time = time.time()
for i in range(10):
t=Mythread("t-%s"%i)
t.setDaemon(True) #把当前线程设置为守护线程
t.start()
Main.Tread_List.append(t)
# for t in Main.Tread_List:
# t.join()
# pass
# stop_time = time.time()
# print(stop_time - start_time)
class Mythread(threading.Thread):
def __init__(self,Tname):
super(Mythread,self).__init__()
self.Tname=Tname
def run(self):
print("task",self.Tname)
time.sleep(5)
运行时,主线程退出,不必等待子线程运行,而是直接中断子线程,退出
import threading,time
class Main(object):
Tread_List=[]
def __init__(self):
pass
def main(self):
# t1=Mythread("t1")
# t2=Mythread("t2")
# t1.start()
# t2.start()
# t1.run()
# t2.run()
start_time = time.time()
for i in range(10):
t=Mythread("t-%s"%i)
t.setDaemon(True) #把当前线程设置为守护线程
t.start()
Main.Tread_List.append(t)
# for t in Main.Tread_List:
# t.join()
# pass
# stop_time = time.time()
# print(stop_time - start_time)
class Mythread(threading.Thread):
def __init__(self,Tname):
super(Mythread,self).__init__()
self.Tname=Tname
def run(self):
print("task",self.Tname)
time.sleep(5)