zoukankan      html  css  js  c++  java
  • 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 互斥锁
  • 相关阅读:
    tomcat的安装以及环境配置
    MySQL日期/时间函数
    docker部署tomcat
    Lambda的高级查询
    Linq的使用
    多线程编程
    反射
    匿名类型
    委托和事件
    泛型特性
  • 原文地址:https://www.cnblogs.com/alplf123/p/8532605.html
Copyright © 2011-2022 走看看