zoukankan      html  css  js  c++  java
  • python 线程信号量 -5

    from atexit import register
    from random import randrange
    from threading import BoundedSemaphore, Lock, Thread
    from time import sleep,ctime
    
    lock = Lock()
    MAX = 5  # 最大线程数
    candytray = BoundedSemaphore(MAX)
    def refill():
        lock.acquire()
        print('Refilling candy...')
        try:
            candytray.release()
        except ValueError as e:
            print('full, skipping', e)
        else:
            print('ok')
        lock.release()
    def buy():
        lock.acquire()
        print('Buying candy...')
        if candytray.acquire(False):
            print('ok')
        else:
            print('empty, skipping')
        lock.release()
    
    def producer(loops):
        for i in range(loops):
            refill()  # 添加
            sleep(randrange(3))
    def consumer(loops):
        for i in range(loops):
            buy()  # 购买
            sleep(randrange(3))
    def _main():
        print('starting at:', ctime())
        nloops = randrange(2,6)
        print(nloops)
        print('THECHADY MACHINE (full with %d bars)!' % MAX)
        Thread(target=consumer, args=(randrange(nloops,nloops+MAX+2),)).start() # buyer
        Thread(target=producer, args=(nloops,)).start()
    
    @register
    def _atexit():
        print('all DONE at:', ctime())
    
    if __name__ == '__main__':
        _main()
    

      

  • 相关阅读:
    python 函数和函数名的应用
    Python 文件操作
    django报错信息解决方法
    小数据池、代码块以及深浅拷贝
    python 字典的增删改查
    ps 整理通道
    unity 捏脸相关
    Unity3D Blend Shape简析
    unity 乳摇
    爱丽丝的头发是怎么制作的
  • 原文地址:https://www.cnblogs.com/412013cl/p/10218280.html
Copyright © 2011-2022 走看看