Python 多线程-线程的调用和join
进程 Progress: 本质上就是一段程序运行的过程
线程 Thread: 线程是进程里面的执行单元
1. 线程的基本调用
import threading import time def hi_thread(i): time.sleep(3) print('thread %s'%i) if __name__ == '__main__': t1=threading.Thread(target=hi_thread,args=(1,)) t2=threading.Thread(target=hi_thread,args=(2,)) t3=threading.Thread(target=hi_thread,args=(3,)) t4=threading.Thread(target=hi_thread,args=(4,)) t1.start() # 线程1 t2.start() # 线程2 t3.start() # 线程3 t4.start() # 线程4 print('main thread') # 主线程
join 方法: 当线程调用 join方法以后,排在join后面的线程必须在该调用join方法的线程完成之后再执行
2. 线程的 join 方法
import threading import time def music(): print('start listen to music... %s' % time.ctime()) time.sleep(3) print('end to music...%s' % time.ctime()) def game(): print('start play to game...%s' % time.ctime()) time.sleep(6) print('end to game...%s' % time.ctime()) if __name__ == '__main__': t1 = threading.Thread(target=music, args=()) t2 = threading.Thread(target=game, args=()) t1.start() t2.start() t1.join() # t1 不结束, main线程就不会执行,因为main线程排在 join的后面 print('main thread %s' % time.ctime()) # 主线程
setDaemon方法:
守护线程;当我们在程序的运行当中,执行一个主线程,如果主线程有创建了子线程,那么主线程和子线程就
兵分两路分别运行,当主线程完成之后程序想退出的时候,会检查子线程是否完成,如果子线程未完成,则主线程会等待子线程完成之后
再退出,但是有时候我们需要的是只要主线程完成后,不管子线程有没有完成,都要和主线程一起退出,这时候子线程就要设置setDaemom方法。
setDaemon必须设置在线程start之前。
3.线程setDaemom方法
import threading import time def music(): print('start listen to music... %s' % time.ctime()) time.sleep(3) print('end to music...%s' % time.ctime()) def game(): print('start play to game...%s' % time.ctime()) time.sleep(6) print('end to game...%s' % time.ctime()) if __name__ == '__main__': t1 = threading.Thread(target=music, args=()) t2 = threading.Thread(target=game, args=()) t2.setDaemon(True) t1.start() t2.start()
4.线程其他基本方法
t1.getName() # 得到线程名 t1.setName('线程1') # 设置线程名 t1.is_alive() # 线程是否活着 threading.active_count() # 返回正在运行线程的数量