zoukankan      html  css  js  c++  java
  • python 线程锁 -4

    from atexit import register
    from random import randrange
    from threading import Thread, currentThread, Lock, current_thread, active_count
    from time import ctime, sleep
    
    
    class CleanOutputSet(set):
        def __str__(self):
            return ', '.join(x for x in self)
    
    
    loops = (randrange(2, 5) for x in range(randrange(3, 7)))
    lock = Lock()
    remaining = CleanOutputSet()
    
    
    def loop(nsec):
        myname = current_thread().name
        # lock.acquire()  # 加锁
        with lock:
            remaining.add(myname)
            print('[%s] Started %s' % (ctime(), myname))
            sleep(nsec)
            remaining.remove(myname)
            print('[%s] Completed %s (%d sece)' % (ctime(), myname, nsec))
            print('(remaining: %s)' % (remaining or 'NONE'))
        # lock.release()
    
    
    def main():
        for pause in loops:
            Thread(target=loop, args=(pause,)).start()
            print(pause, 'aaa')
    
    # 程序结束之前调用, exit() 方法调用之前
    @register
    def _atexit():
        print(active_count())  # 当前线程数
        print('all DONE at:', ctime())
    
    
    main()
    

      

  • 相关阅读:
    session的使用
    不可变对象的魅力
    协变和逆变
    LaTeX 学习小结
    KMP 算法的两种实现
    MySQL MVCC
    Java 并发之 Executor 框架
    Java 动态代理的简单使用和理解
    Java 偏向锁、轻量级锁和重量级锁
    事件循环和协程
  • 原文地址:https://www.cnblogs.com/412013cl/p/10217916.html
Copyright © 2011-2022 走看看