前言
队列库提供了适用于多线程编程的先进先出(FIFO)数据结构,可用于在生产者线程和消费者线程之间安全地传输消息或其他数据。它为调用者处理锁,使得多线程处理同一个队列实例更加安全和容易。队列的大小可能会受到限制,以限制内存使用或处理。
00-1010队列类实现了一个基本的先进先出容器。使用put()向该序列的一端添加元素,使用get()从另一端删除元素。具体代码如下:
导入队列
q=队列。队列()
对于(1,10):范围内的I
q.put(i)
而不是空的(:)
print(q.get()、end=' ')运行后,效果如下:
这里,我们依次向队列中添加1到10。因为先进先出,出来的顺序和加进去的顺序一样。
基本用法
由于存在先进先出队列,因此数据结构中必须存在后进先出队列。后进先出队列是后进先出队列,示例如下:导入队列
q=队列。后进先出队列()
对于(1,10):范围内的I
q.put(i)
而不是空的(:)
print(q.get()、end=' ')运行后,效果如下:
LIFO队列
在操作系统中,我们经常按照优先级来处理任务,比如系统优先级最高,我们必须在用户任务之前优先处理系统任务。同样,队列库为我们提供了优先级队列来处理优先级队列。例子如下:
导入队列
导入线程
类别作业:
def __init__(自我,优先,desc):
自我优先
自我描述=desc
打印('新工作: ',desc)
返回
def __eq__(自身,其他):
尝试:
返回self.priority==other.priority
属性错误:除外
返回未实现
def __lt__(自身,其他):
尝试:
返回自我优先其他优先
属性错误:除外
返回未实现
def process_Job(q):
而True:
next_job=q.get()
打印(next_job.desc)
q.task_done()
q=队列。优先级队列()
q.put(作业(5,‘五个作业’)
q.put(作业(15,‘十五个作业’)
q.put(作业(1,‘一个作业’)
工人=[
穿线。Thread(target=process_Job,args=(q,),
穿线。Thread(target=process_Job,args=(q,),
]
对于工人的工作:
工作.设置守护程序(真)
work.start()
q.join()运行后,效果如下:
这里,默认值越高,优先级越高。我们可以看到,先执行第15个任务,然后执行第5个和第1个任务。这个例子表明,当多个线程正在处理任务时,在获取()时,应该根据队列中元素的优先级来处理它们。