一、通过类创建子线程
1 import threading 2 class MyThread(threading.Thread): 3 def __init__(self,num): 4 threading.Thread.__init__(self) 5 self.num = num 6 def run(self): 7 print('running on number %s' %self.num) 8 if __name__ == '__main__': 9 t1 = MyThread(1) 10 t2 = MyThread(2) 11 t1.start() 12 t2.start()
二、同步锁
import time import threading def cal(): global num r.acquire() #上锁 temp = num time.sleep(0.001) num = temp-1 r.release() #开锁
1.被上锁的代码不执行完,GIL锁不释放,线程不切换
2.开锁后,多线程正常运行
1 num = 100 2 thread_list = [] 3 r = threading.Lock() #创建锁 4 for i in range(100): 5 t = threading.Thread(target=cal) 6 t.start() 7 thread_list.append(t) 8 9 for t in thread_list: #等待所有子线程执行完毕 10 t.join() 11 12 print(num)