• Python随心记--线程列队


    import threading,time
    
    li = [1,2,3,4,5,6]
    def pri():
        while li:
            a = li[-1]
            print(a)
            time.sleep(1)
            li.remove(a)
            try:
                li.remove(a)
            except Exception as e:
                print(a,e)
    
    t1 = threading.Thread(target=pri,args=())
    t1.start()
    t2 = threading.Thread(target=pri,args=())
    t2.start()
    先进先出
    import queue   #线程队列 2.7的时候q为大写
    
    q = queue.Queue(3)   #FIFO 默认 1先进先出 2先进后出 3后进先出
    
    q.put(12)
    q.put('hello')
    q.put({'name':'aaron'})
    q.put(123,False)   #如果已满就不再加进去
    
    while 1:
        data = q.get()
        #data = q.get(block = False)
    
        print(data)
        print('------------------')
    先进后出
    import queue   #线程队列 2.7的时候q为大写
    
    q = queue.LifoQueue()   #FIFO 默认 1先进先出 2先进后出 3后进先出
    
    q.put(12)
    q.put('hello')
    q.put({'name':'aaron'})
    q.put(123,False)   #如果已满就不再加进去
    
    while 1:
        data = q.get()
    
        print(data)
        print('------------------')
    
    import queue   #线程队列 2.7的时候q为大写
    
    q = queue.LifoQueue()
    
    q.put(12)
    q.put('hello')
    q.put({'name':'aaron'})
    q.put(123,False)   #如果已满就不再加进去
    
    print(q.qsize())
    print(q.empty())
    print(q.full())
    print(q.task_done())   #在完成任务之后q.task_done函数向任务已经完成的队列发送一个信号
    print(q.join())
    生成消费者模型:通过一个容器来解决生产者和消费者的强耦合问题
    import queue,threading,time,random
    
    q = queue.Queue()
    
    def Producter(name):
        count = 0
        while count < 10:
            print('making..............')
            time.sleep(random.randrange(3))
            q.put(count)
            print('Producter %s has producter %s baozi。。' %(name,count))
    
            count += 1
            print('ok........')
    
    def Consumer(name):
        count = 0
    
        while count < 10:
            time.sleep(random.randrange(4))
    
            if not q.empty():
                data = q.get()
    
                print(data)
                print('33[32;1mConsumer %s has eat %s baozi..33[0m' %(name,count))
            else:
                print('no baozi anymore')
            count += 1
    
    
    p = threading.Thread(target=Producter,args=('A',))
    c = threading.Thread(target=Consumer,args=('B',))
    
    p.start()
    c.start()
    存在问题版本
    import queue,threading,time,random
    
    q = queue.Queue()
    
    def Producter(name):
        count = 0
        while count < 10:
            print('making..............')
            time.sleep(random.randrange(3))
            q.put(count)
            print('Producter %s has producter %s baozi。。' %(name,count))
    
            count += 1
    
            q.task_done()
            #q.join()
            print('ok........')
    
    def Consumer(name):
        count = 0
    
        while count < 10:
            time.sleep(random.randrange(4))
    
            if not q.empty():
                data = q.get()
                #q.task_done()
                q.join()
                print('33[32;1mConsumer %s has eat %s baozi..33[0m' %(name,data))
            else:
                print('no baozi anymore')
            count += 1
    
    
    p = threading.Thread(target=Producter,args=('A',))
    c1 = threading.Thread(target=Consumer,args=('B',))
    c2 = threading.Thread(target=Consumer,args=('C',))
    c3 = threading.Thread(target=Consumer,args=('D',))
    
    p.start()
    c1.start()
    c2.start()
    c3.start()
    解决问题版本
    import queue,threading,time,random
    
    q = queue.Queue()
    
    def Producter(name):
        count = 0
        while count < 10:
            print('making..............')
            time.sleep(5)
            q.put(count)
            print('Producter %s has producter %s baozi。。' %(name,count))
    
            count += 1
    
            q.task_done()
            #q.join()
            print('ok........')
    
    def Consumer(name):
        count = 0
    
        while count < 10:
            time.sleep(random.randrange(4))
            print('waiting...........')
            q.join()
            data = q.get()
            #q.task_done()
    
            print('33[32;1mConsumer %s has eat %s baozi..33[0m' %(name,data))
    
            count += 1
    
    
    p = threading.Thread(target=Producter,args=('A',))
    c1 = threading.Thread(target=Consumer,args=('B',))
    c2 = threading.Thread(target=Consumer,args=('C',))
    c3 = threading.Thread(target=Consumer,args=('D',))
    
    p.start()
    c1.start()
    c2.start()
    c3.start()
    
    import queue,threading,time,random
    
    q = queue.Queue()
    
    def Producter(name):
        count = 0
        while count < 10:
            print('making..............')
            time.sleep(5)
            q.put(count)
            print('Producter %s has producter %s baozi。。' %(name,count))
    
            count += 1
    
            # q.task_done()
            q.join()
            print('ok........')
    
    def Consumer(name):
        count = 0
    
        while count < 10:
            time.sleep(random.randrange(4))
    
            # q.join()
            data = q.get()
            print('eating...........')
            time.sleep(4)
    
            q.task_done()
    
            print('33[32;1mConsumer %s has eat %s baozi..33[0m' %(name,data))
    
            count += 1
    
    
    p = threading.Thread(target=Producter,args=('A',))
    c1 = threading.Thread(target=Consumer,args=('B',))
    c2 = threading.Thread(target=Consumer,args=('C',))
    c3 = threading.Thread(target=Consumer,args=('D',))
    
    p.start()
    c1.start()
    c2.start()
    c3.start()
  • 相关阅读:
    杂谈
    P1441 砝码称重
    P3159 [CQOI2012]交换棋子
    P5200 [USACO19JAN]Sleepy Cow Sorting
    P5201 [USACO19JAN]Shortcut
    P5196 [USACO19JAN]Cow Poetry
    20190922UVA测试
    P4014 分配问题
    P4012 深海机器人问题
    P2050 [NOI2012]美食节
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10325235.html
Copyright © 2020-2023  润新知