python 装饰器小技巧(一) 信号量控制

#装饰器小技巧一信号量控制
import threading, time
NUM = 10

# 定义信号量控制
def synchronized(func):
    func.__sem__ = threading.Semaphore(value=NUM)
    print(func.__sem__)
    def wraper(*args, **kwargs):
        #支持上下文
        with func.__sem__:
            return func(*args, **kwargs)

    return wraper
#测试函数
@synchronized
def test(index):
    #模拟耗时
    print('%d threadId:%d waiting' % (index, threading.current_thread().ident))
    time.sleep(2)
    print('%d threadId:%d leave' % (index, threading.current_thread().ident))
#开启一百线程
for t in range(100):
    t1 = threading.Thread(target=test, args=(t,))
    t1.start()
#同样的还支持Lock 互斥锁

 

posted @ 2018-03-09 10:45  我是外婆  阅读(176)  评论(0编辑  收藏  举报