创建多线程的两种方式:
1.封装成类的形式:
class MyTread(threading.Thread): def __init__(self,name): super(MyTread,self).__init__() self.name = name #多线程启动的入口 def run(self): self.sayHello() def sayHello(self): print("%s say hello!" %self.name) time.sleep(1) print(" 当前活动线程:%s" % threading.currentThread()) for i in range(5): t = MyTread("member%d" %i) t.start()
注意run方法是多线程启动的入口,一定要重写
2.函数方式
def sayHello(name): print("%s say hello!" %name) time.sleep(1) for i in range(5): t = threading.Thread(target=sayHello,args=("menber%d" %i,))#注意逗号 t.start()
注意单函数有传入参数时args参数中的逗号
PS1:
子线程在被主线程创建出来之后,子线程和主线程就是平等的,主线程并不会等待子线程结束,如果需要等待子线程结束后再进行操作,必须是有join
def sayHello(name):
print("%s say hello!" %name)
time.sleep(1)
start = time.time()
lst = []
for i in range(5):
t = threading.Thread(target=sayHello,args=("menber%d" %i,))#注意逗号
t.start()
lst.append(t)
#等待所有的子线程执行结束
for t in lst:
t.join()
print(time.time() - start)
如果不进行join操作,那么主线程在创建子线程之后会直接执行之后的操作,并不会等待线程执行完毕
Ps2:守护线程
守护线程服务于主线程,只要主线程结束,守护线程也会强制结束
def sayHello(name): print("%s say hello!" %name) time.sleep(1) for i in range(5): t = threading.Thread(target=sayHello,args=("menber%d" %i,))#注意逗号 #设置了守护线程之后,主线程结束子线程也会立即结束(不进行join的情况下) t.setDaemon(True) t.start()