1,线程的基本使用

import threading print('666') def func(arg): print(arg) t = threading.Thread(target=func,args=(1,)) t.start() print('end')
2,主线程默认等子线程执行完毕

import threading import time def func(arg): time.sleep(arg) print(arg) t1 = threading.Thread(target=func,args=(3,)) t1.start() t2 = threading.Thread(target=func,args=(4,)) t2.start() print(123)
3,主线程不再等,主线程终止则所有子线程终止 *****

import time import threading def func(arg): time.sleep(2) print(arg) t1 = threading.Thread(target=func,args=(3,)) t1.setDaemon(True) t1.start() t2 = threading.Thread(target=func,args=(5,)) t2.setDaemon(True) t2.start() print(123)
4,开发者可以控制主线程等待子线程(最多等待时间)

import threading import time def func(arg): time.sleep(0.1) print(arg) print('创建子线程t1') t1 = threading.Thread(target=func,args=(3,)) t1.start() t1.join(2) #无参数,让主线程在这里等着,等到子线程t1执行完毕,才可以继续往下走 #有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走 print('创建子线程t2') t2 = threading.Thread(target=func,args=(5,)) t2.start() t2.join(2) print(123)
5,线程名称

import threading def func(arg): t = threading.current_thread() #获取当前执行该函数的线程对象 name = t.getName() #根据当前线程对象获取当前线程名称 print(name,arg) t1 = threading.Thread(target=func,args=(11,)) t1.setName('t1线程') #设置名字 t1.start() t2 = threading.Thread(target=func,args=(22,)) t2.setName('t2线程') t2.start() print(123)
6,多线程加锁

import time import threading lock = threading.RLock() n = 10 def task(i): print('这段代码不加锁',i) #全部读取到这里后被锁拦截 lock.acquire() #加锁,此区域的代码同一时刻只能有一个线程执行 global n print('当前线程',i,'读取到的n为',n) n = i time.sleep(1) print('当前线程',i,'修改n值为:',n) lock.release() #释放锁 for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()