线程的使用
from threading import Thread
import time
def func(i):
print("start{}".format(i))
time.sleep(1)
print("end{}".format(i))
for i in range(10):
Thread(target=func,args=(i,)).start()
守护线程的使用
主进程结束时,守护线程不会直接结束,等待所有线程执行完毕,守护线程才会结束,因此,守护线程守护的是所有的线程
from threading import Thread
import time
def func(i):
print("start{}".format(i))
time.sleep(10)
print("end{}".format(i))
def func2(i):
s = 3
while True:
time.sleep(1)
s -= 1
print("线程2".format(i))
print(s)
if not s:
break
s = Thread(target=func,args=(1,))
l = Thread(target=func2,args=(1,))
l.start()
s.daemon = True
s.start()
获取线程详细信息:
使用:current_thread 获取线程的名字和线程号
current_thread.name 获取线程的名字
current_thread.ident 获取线程的线程号
from threading import Thread,current_thread
import os
import time
def func(i):
print("线程名:{}".format(current_thread().name))
print("线程号:{}".format(current_thread().ident))
print("线程详细信息:{}".format(current_thread()))
if __name__ == '__main__':
for i in range(10):
p = Thread(target=func,args=(i,))
p.start()
运行结果:
线程的其他属性
enumerate() 列表,保存存活的线程
active_count() 数字,保存存活的线程列表长度
from threading import Thread,current_thread,enumerate,active_count
import os
import time
def func(i):
print("执行线程{}\n".format(i))
if __name__ == '__main__':
new_list = []
for i in range(10):
p = Thread(target=func,args=(i,))
p.start()
new_list.append(p)
print("<<<<>>>>>")
print(enumerate(), active_count())
for t in new_list:
t.join()
print("所有的进程执行完毕")
print(enumerate(),active_count())
面向对象的方式进行线程的编写
from threading import Thread,current_thread,enumerate,active_count
class MyThrea(Thread):
def __init__(self,i,k):
self.i = i
self.k = k
super().__init__()
def run(self):
print(self.ident)
MyThrea(1,2).start()
print(enumerate(),active_count())
print(current_thread())