学习版本3.5.2
1.实例化线程对象并初始化,用start()方法可以启动线程
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
group是留着以后扩展用的,target是一个方法,name是线程名,args是位置变量的元组,kwargs是关键字变量的字典,daemon是是否为守护线程
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from threading import Thread
import time
def test(str):
print("begin:",str)
time.sleep(5)
print("end:",str)
if __name__ == "__main__":
threadlist = []
for i in range(5):
t = Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.start()
运行结果
begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
end: 0
end: 3
end: 4
end: 2
end: 1
2.join(self, timeout=None)方法,阻塞当前线程直到线程结束,设置了timeout时候等待设置的时间之后就释放阻塞 也就是说,join()之后的语句得等该线程运行完成之后才会调用
不用join()时候
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from threading import Thread
import time
def test(str):
print("begin:",str)
time.sleep(5)
print("end:",str)
if __name__ == "__main__":
threadlist = []
for i in range(5):
t = Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.start()
print("main")
运行结果
begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
main
end: 0
end: 3
end: 2
end: 4
end: 1
加了join()来阻塞了主线程
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from threading import Thread
import time
def test(str):
print("begin:",str)
time.sleep(5)
print("end:",str)
if __name__ == "__main__":
threadlist = []
for i in range(5):
t = Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.start()
threadlist[0].join()
print("main")
运行结果
begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
end: 0
end: 3
end: 2
main
end: 1
end: 4
3.run()方法与start()方法的区别
start()方法是启动了一个线程,run()方法只是一个线程体。start()方法是启动一个线程来运行了run()方法。
run()方法调用了我们初始化Thread对象时候传入的target方法。run()方法经常被我们重写。
用run()
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from threading import Thread
import time
def test(str):
print("begin:",str)
time.sleep(5)
print("end:",str)
if __name__ == "__main__":
threadlist = []
for i in range(5):
t = Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.run()
print("main")
运行结果
begin: 0
end: 0
begin: 1
end: 1
begin: 2
end: 2
begin: 3
end: 3
begin: 4
end: 4
main
用start()
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from threading import Thread
import time
def test(str):
print("begin:",str)
time.sleep(1)
print("end:",str)
if __name__ == "__main__":
threadlist = []
for i in range(5):
t = Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.start()
print("main")
运行结果
begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
main
end: 1
end: 2
end: 0
end: 3
end: 4
4.其它方法和变量
getName(self),setName(self,name),name 跟线程名字相关
isDaemon(self),setDaemon(self, daemonic),daemon 跟是否是守护线程相关
is_alive(self),isAlive(self) 这两个效果一样,返回线程是否还在alive状态
ident 线程的标示符