#1、线程的队列是使用import queue,如果使用from threading import Queue会报错,因为threading模块没有Queue。 #也就是说,线程队列Queue是在queue模块里面,不在threading模块里面。 import queue q = queue.Queue() q.put(1) print(q.get()) #2、LifoQueue:后进先出队列 import queue q = queue.LifoQueue() q.put(1) q.put(2) q.put(3) print(q.get()) print(q.get()) print(q.get()) # 3 # 2 # 1 #3、PriorityQueue:优先级队列:值越小越优先,值相同就先进先出。 import queue q = queue.PriorityQueue() q.put((3,'c')) q.put((1,'a')) q.put((1,'b')) q.put((4,'d')) print(q.get()) print(q.get()) print(q.get()) print(q.get()) # (1, 'a') # (1, 'b') # (3, 'c') # (4, 'd') #生产者和消费者模型: # 4、queue模块里面有Queue这个类,Queue里面有task_done和join方法。 # 通过下列方法让消费者线程结束: # 消费者吃完包子,通过q.task_done()发信号给-->生产者,q.join()接收信号之后不再阻塞,生产者线程结束--> # -->接着主线程t1.join()的意思是主线程随着生产者t1子线程的结束而结束-->最后消费者守护线程t2.setDaemon(True)随着主线程的结束而结束。 import queue from threading import Thread import time def producer(q): for i in range(100): q.put('包子%s' % i) q.join() def consumer(q, i): while True: print('消费者%s吃到%s' % (i, q.get())) q.task_done() q = queue.Queue(10) t1 = Thread(target=producer, args=(q,)) t1.start() for i in range(5): t2 = Thread(target=consumer, args=(q, i)) t2.setDaemon(True) t2.start() t1.join() #task_done方法在进程multiprocessing模块的JoinableQueue类里面,在线程queue模块的Queue类里面。
day52-线程-队列
猜你喜欢
转载自www.cnblogs.com/python-daxiong/p/12142809.html
今日推荐
周排行