首页 > 编程知识 正文

python中不变的数据结构(python的queue)

时间:2023-05-05 02:00:16 阅读:103340 作者:878

前言

队列库提供了适用于多线程编程的先进先出(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个任务。这个例子表明,当多个线程正在处理任务时,在获取()时,应该根据队列中元素的优先级来处理它们。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。