在Priority Queue中使用时,def __cmp __(self,other)有什么用?

时间:2015-01-12 03:36:11

标签: python

import Queue

class Job(object):

    def __init__(self, priority, description):
        self.priority = priority
        self.description = description

    def __cmp__(self,other):
        return cmp(self.priority, other.priority)  

" cmp"的需要是什么?功能?

从名称来看,似乎是将优先级与其他优先级进行比较。

1 个答案:

答案 0 :(得分:1)

根据Priority Queue docs,在优先级队列中,"首先检索最低值的条目(最低值条目是按排序(列表(条目))返回的条目[0 ])"

通过为__cmp__对象定义Job函数,随时使用这些Job对象运行sortsorted(或类似函数),系统知道排序必须基于这些对象的.priority属性。

因此,当这些作业的使用者试图从优先级队列中获取作业时,队列将向其传递具有最低.priority值的作业。如果没有__cmp__定义,作业的顺序将是任意的(我认为在CPython中它将根据每个对象的内存位置结束,这可能没有明显的顺序)。