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()
    

      

  • 相关阅读:
    回溯法之图的着色问题
    回溯法基本思想
    L2-006 树的遍历
    P1540 机器翻译
    P1067 多项式输出
    C++STL之map映照容器
    C++STL之multiset多重集合容器
    C++STL之set集合容器
    C++之string基本字符系列容器
    C++STL之vector向量容器
  • 原文地址:https://www.cnblogs.com/412013cl/p/10218280.html
Copyright © 2011-2022 走看看