Python随心记--线程列队,,import thr


import threading,timeli = [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,randomq = 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(‘\033[32;1mConsumer %s has eat %s baozi..\033[0m‘ %(name,count))        else:            print(‘no baozi anymore‘)        count += 1p = threading.Thread(target=Producter,args=(‘A‘,))c = threading.Thread(target=Consumer,args=(‘B‘,))p.start()c.start()
存在问题版本
import queue,threading,time,randomq = 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(‘\033[32;1mConsumer %s has eat %s baozi..\033[0m‘ %(name,data))        else:            print(‘no baozi anymore‘)        count += 1p = 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,randomq = 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(‘\033[32;1mConsumer %s has eat %s baozi..\033[0m‘ %(name,data))        count += 1p = 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,randomq = 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(‘\033[32;1mConsumer %s has eat %s baozi..\033[0m‘ %(name,data))        count += 1p = 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()

Python随心记--线程列队

评论关闭