码迷,mamicode.com
首页 > 编程语言 > 详细

python之迭代锁与信号量

时间:2018-12-31 19:09:07      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:oca   cal   threading   target   迭代   get   nbsp   map   active   

如果现在需要在多处加锁大于等于2的时候 因为计算机比较笨,当他锁上一把锁的时候又所理一把锁,等他来开锁的时候他不知道用哪把钥匙来开锁,

所以这个时候我们需要把把平常的锁变为迭代锁

eg:

import threading
import time

local = threading.RLock()
# 迭代加锁首先生成实例
def run(name):
    global num
    local.acquire()  # 上锁
    num += 1
    run2(num)
    local.release()  # 解锁
    print(threading.active_count())

def run2(num):
    local.acquire()
    num += 1
    run3(num)
    local.release()

def run3(num):
    local.acquire()
    num+=1
    local.release()

num = 0
py_res = []
for i in range(50):
    t = threading.Thread(target=run,args=(t%s%i,))
    py_res.append(t)
    t.start()


for i in py_res:
    i.join()

print("num : %s"% num)

型号量可以控制同线程的个数,和锁的用法一样

import threading
import time
senm = threading.BoundedSemaphore(5)
def run(num):
    senm.acquire()  # 上锁
    time.sleep(2)
    print(run the thread %s % num)
    senm.release()  # 解锁

for i in range(50):
    t = threading.Thread(target=run, args=(%s % i,))
    t.start()
    print(threading.active_count())

while threading.active_count() != 1:
    pass
else:
    print(is done)

 

python之迭代锁与信号量

标签:oca   cal   threading   target   迭代   get   nbsp   map   active   

原文地址:https://www.cnblogs.com/BookMiki/p/10202613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!