美文网首页
threading.Condition

threading.Condition

作者: ThomasYoungK | 来源:发表于2019-01-24 22:20 被阅读2次
    """https://www.bogotobogo.com/python/Multithread/python_multithreading_Synchronization_Condition_Objects_Producer_Consumer.php
    """
    
    import threading
    import time
    import logging
    
    logging.basicConfig(level=logging.DEBUG,
                        format='(%(threadName)-9s) %(asctime)s %(message)s', )
    
    
    def consumer(cv):
        logging.debug('Consumer thread started ...')
        with cv:  # 获得锁
            logging.debug('Consumer waiting ...')
            cv.wait()  # 未苏醒时释放锁并卡住,被唤醒后抢占锁并继续执行, 否则继续卡在这里等待锁释放
            logging.debug('Consumer consumed the resource')
            time.sleep(2)
        # 释放锁
    
    
    def producer(cv):
        logging.debug('Producer thread started ...')
        with cv:  # 获得锁
            logging.debug('Making resource available')
            logging.debug('Notifying to all consumers')
            cv.notifyAll()
            logging.debug('wating 2 seconds then release lock')
            time.sleep(2)
        # 释放锁
    
    
    if __name__ == '__main__':
        condition = threading.Condition()  # condition内部有把锁
        cs1 = threading.Thread(name='consumer1', target=consumer, args=(condition,))
        cs2 = threading.Thread(name='consumer2', target=consumer, args=(condition,))
        pd = threading.Thread(name='producer', target=producer, args=(condition,))
    
        cs1.start()
        time.sleep(2)
        cs2.start()
        time.sleep(2)
        pd.start()
        cs1.join()
        cs2.join()
        pd.join()
        logging.debug('end')
    
    

    相关文章

      网友评论

          本文标题:threading.Condition

          本文链接:https://www.haomeiwen.com/subject/ldcpjqtx.html