import queue
import threading
import time
"""
队列
queue.Queue(maxsize=0): 先进先出,无参数默认无大小
queue.LifoQueue(maxsize=0): 后进先出
queue.PriorityQueue(maxsize=0): size最小的先出
queue.SimpleQueue: 先进先出且不支持task_done和join方法
队列的方法
q.qsize(): 队列大小
q.empty(): 队列是否为空
q.full(): 队列是否为满
q.get_nowait(): 等价于q.get(False)
q.put_nowait(item): 等价于q.put(item, False)
q.task_done(): 防止任务阻塞
q.join(): 阻塞到所有任务已完成,继续执行q.join后的代码
"""
q = queue.Queue()
def task(name):
num = 0
while True:
q.put(num)
print(f'{name}{num}出现')
num += 1
time.sleep(1)
def worker(name):
while True:
print(f'{name}{q.get()}')
time.sleep(1)
q.task_done()
t1 = threading.Thread(target=task, args=('任务',))
t2 = threading.Thread(target=task, args=('怪兽',))
t3 = threading.Thread(target=worker, args=('完成了任务',))
t4 = threading.Thread(target=worker, args=('击败了怪兽',))
t1.start()
t2.start()
t3.start()
t4.start()
E:\ex\venv\Scripts\python.exe E:/ex/main.py
任务0出现
怪兽0出现
完成了任务0
击败了怪兽0
击败了怪兽1
任务1出现
怪兽1出现
完成了任务1
任务2出现击败了怪兽2
怪兽2出现
完成了任务2
完成了任务3
怪兽3出现
任务3出现
击败了怪兽3
任务4出现
怪兽4出现
击败了怪兽4
完成了任务4
任务5出现
击败了怪兽5
怪兽5出现
完成了任务5
Process finished with exit code -1