python的优先队列示例

本文通过一个示例展示了如何使用Python标准库中的`Queue.PriorityQueue`实现优先级队列。示例中创建了Job类,具备比较优先级的方法,并在队列中放入不同优先级的任务,由多个工作线程按优先级处理任务。
摘要由CSDN通过智能技术生成

来自python标准库

1. 代码

import Queue
import threading
class Job(object):
    def __init__(self, priority, description):
        self.priority = priority
        self.description = description
        print 'New job:', description
        return     
    def __cmp__(self, other):
        return cmp(self.priority, other.priority)
    
q = Queue.PriorityQueue()
q.put(Job(3,'Mid-level job'))
q.put(Job(10,'Low-level job'))
q.put(Job(1,'Important job'))


def process_job(q):
    while True:
        next_job = q.get()
        print 'Processing job:', next_job.description
        q.task_done()        
workers = [threading.Thread(target=process_job,args=(q,)),
           threading.Thread(target=process_job,args=(q,)),]
for w in workers:
    w.setDaemon(True)
    w.start()
q.join()


2. 执行结果

New job: Mid-level job
New job: Low-level job
New job: Important job
Processing job: Important job
Processing job: Mid-level job
Processing job: Low-level job

Python优先队列可以通过使用`heapq`模块来实现。`heapq`提供了一个函数`heappush`用于将元素插入优先队列,以及一个函数`heappop`用于从队列弹出具有最高优先级的元素。 下面是一个使用优先队列示例代码: ```python import heapq # 创建一个空的优先队列 pq = [] # 插入元素到优先队列 heapq.heappush(pq, 5) heapq.heappush(pq, 2) heapq.heappush(pq, 10) # 弹出具有最高优先级的元素 print(heapq.heappop(pq)) # 输出: 2 print(heapq.heappop(pq)) # 输出: 5 print(heapq.heappop(pq)) # 输出: 10 ``` 在上面的示例,我们首先导入了`heapq`模块,并创建了一个空的优先队列`pq`。然后,我们使用`heappush`函数将一些元素(5,2和10)插入到队列。最后,我们使用`heappop`函数依次弹出具有最高优先级的元素。 请注意,这里默认使用的是自然顺序进行元素比较。如果要使用自定义优先级的元素,可以将元素转换为元组 `(priority, item)` 的形式,其 `priority` 是一个可以进行比较的值,`item` 是实际的元素。例如,如果要按照元素的第二个值进行排序: ```python import heapq # 创建一个空的优先队列 pq = [] # 插入元素到优先队列 heapq.heappush(pq, (5, 'apple')) heapq.heappush(pq, (2, 'banana')) heapq.heappush(pq, (10, 'orange')) # 弹出具有最高优先级的元素 print(heapq.heappop(pq)) # 输出: (2, 'banana') print(heapq.heappop(pq)) # 输出: (5, 'apple') print(heapq.heappop(pq)) # 输出: (10, 'orange') ``` 希望能帮助到你!如有任何疑问,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值