join() threading.Thread setDaemon(True)
'''
join():在子线程完成之前执行,这个子线程的父线程将一直被阻塞
setDaemon(True):将线程声明为守护线程,必须在start()之前设置,如果不设置为守护线程,程序会被无限挂起。这个方法基本和join是相反的。
当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就兵分两路,分别运行,那么当主线程完成想退出时,
会检验子线程是否完成,如果子线程未完成,则主线程会等待子线程完成后再退出,但有时候,我们需要的是,只要主线程完成了,不管子线程是否完成,
都要和主线程一起推出,这是就可以用setDaemon(True)方法啦
'''
import time import threading def music(): print('begin to listen %s' %time.ctime()) time.sleep(3) print('stop to listen %s' %time.ctime()) def game(): print('begin to play game %s' %time.ctime()) time.sleep(5) print('stop to play game %s' %time.ctime()) if __name__ == '__main__': t1 = threading.Thread(target=music) t2 = threading.Thread(target=game) t1.start() # t1.join() t2.start() # t2.join() print('ending------')
import time import threading class Tt(): def __init__(self,name,things): self.name = name self.things = things def aa(self): print('%s开始%s %s' %(self.name,self.things,time.ctime())) time.sleep(3) print('%s结束%s %s' %(self.name,self.things,time.ctime())) def bb(self): print('%s开始%s %s' %(self.name,self.things,time.ctime())) time.sleep(5) print('%s结束%s %s' % (self.name, self.things, time.ctime())) T = [] #定义一个空字典 tt1 = Tt('小狗','音乐') #实例化 tt2 = Tt('豆豆','游戏') t1 = threading.Thread(target=tt1.aa)#tt1.aa可以看作tt.aa()函数 t2 = threading.Thread(target=tt2.bb) T.append(t1) T.append(t2) for i in T: i.start() print('ending------------')
多线程的另外一种调用方法
#多线程的另外一种调用方法 import threading class Myserver(threading.Thread): def run(self): #必须用run函数 print('-------') t1 = Myserver() t1.start() print('ending----')