Python多线程多用于IO密集型操作,对于计算密集型不适用
#1.多线程编写示例 import threading def func(args): print("子线程",args) t = threading.Thread(target= func,args=(11,)) # 11后面的逗号是为了区别括号不是集合 t.start() print("主线程")
##########################2.主线程默认等子线程执行完毕############################## import threading import time def func(arg): time.sleep(arg) print("子线程%s秒"%arg) t1 = threading.Thread(target= func,args=(3,)) t1.start() t2 = threading.Thread(target= func,args=(5,)) t2.start() print("主线程")
.setDaemon(True)守护进程
##########3.主线程不在等子线程执行完毕,主线程终止则所有子线程终止############# import threading import time def func(arg): time.sleep(arg) print("子线程%s秒"%arg) t1 = threading.Thread(target= func,args=(3,)) t1.setDaemon(True)#守护进程,在start之前,为True时,主线程不在等待子线程 t1.start() t2 = threading.Thread(target= func,args=(5,)) t2.start() print("主线程")
.join()
#########4.开发者可以控制主线程等待子线程(最多等待时间)############# import threading import time def func(arg): time.sleep(arg) print("子线程%s秒"%arg) t1 = threading.Thread(target= func,args=(1,)) t1.start() t1.join(2) # 有参数n,让主线程在这里最多等待n秒,无论是否执行完毕,都会继续往下走 t2 = threading.Thread(target= func,args=(3,)) t2.start() t2.join()# 无参数,让主线程在这等着,等到子线程t1执行完毕,才可以继续往下走。 print("主线程")
获取线程对象
#############5.获取线程名称############# import time import threading def func(arg): t = threading.current_thread() #获取当前执行该函数的线程的对象 name = t.getName() # 根据当前线程对象获取当前线程名称 print(name,"传的值是:",arg) t1 = threading.Thread(target= func,args=(1,)) t1.setName("子线程1") t1.start() t2 = threading.Thread(target=func,args=(2,)) t2.setName("子线程2") t2.start() time.sleep(1) print("主线程")
线程本质
########6.线程本质######### import threading def func(arg): print(arg," ") t1 = threading.Thread(target=func,args=(33,)) t1.start() #start 不是立即开始运行线程,而是告诉CPU,我已经准备好了,你可以调度我了,cpu什么时候高兴什么时候运行线程 print("主线程")
了解:面向对象版本的多线程
#######7.了解:面向对象版本的多线程######## #多线程方式:1 import threading def func(arg): print(arg) t1 = threading.Thread(target=func,args=(12,)) t1.start() #duoxianc方式:2 class MyThread(threading.Thread): def run(self): print(self._args,self._kwargs) t3 = MyThread(args=(44,"name=zwnsyw")) t3.start()