python3 多线程 (threading) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例

学习记录:python3 多线程 (threading ) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例

 

import threading
import time



def sub(num):

    global count

    lock.acquire()  #上锁,第一个线程如果申请到锁,会在执行公共数据的过程中持续阻塞后续线程
                    #即后续第二个或其他线程依次来了发现已经被上锁,只能等待第一个线程释放锁
                    #当第一个线程将锁释放,后续的线程会进行争抢

    '''线程的公共数据  下'''
    print(num)
    temp=count
    time.sleep(0.001)    #模拟大量的io操作
    count=temp+1
    '''线程的公共数据  上'''

    lock.release()  #释放锁

    time.sleep(2)
    # 释放信号量,可用信号量加一
    threadmax.release()




start = time.time() #记录程序开始时间

threadmax = threading.BoundedSemaphore(4)  #限制线程的最大数量为4个

count=0

lock=threading.Lock()   #将锁内的代码串行化

l=[]

for i in range(100):
    # 增加信号量,可用信号量减一
    threadmax.acquire()

    t=threading.Thread(target=sub,args=('123',))

    t.start()

    l.append(t)

for t in l:

    t.join()

print(count)

end = time.time() #记录程序结束时间

print(end-start) #程序运行时长

 

你可能感兴趣的:(Python,Python,学习记录)