例1:线程加锁
import threading
import time
num=0
def run(n):
lock.acquire()
global num
num+=1
print("task start",n)
time.sleep(2)
print("task done=>",n,'num=%d'%num)
print(threading.current_thread())
lock.release()
def run1():
print('hello')
start_time=time.time()
lock=threading.Lock()
for i in range(5):
t=threading.Thread(target=run,args=('t-%s'%i,))
t.start()
t1=threading.Thread(target=run1)
print(threading.current_thread())
t1.start()
print(threading.current_thread())
print(threading.active_count())
print(threading.current_thread())
print('cost:',time.time()-start_time)
例2:信号量
import threading,time
num = 0
def run(n):
t_sema.acquire()
print('task start!')
global num
num+=1
print("task done",n,'num=%d'%num)
time.sleep(2)
t_sema.release()
t_sema = threading.BoundedSemaphore(5)
l_th=[]
for i in range(20):
t=threading.Thread(target=run,args=('t->%s'%i,))
l_th.append(t)
t.start()
# for i in l_th:
# i.join()
print(num)
print('DONE')
加锁和信号量的本质是相同的,只不过加锁是一个,信号量是多个。可参考阮一峰日志中的讲解。