1

我正在使用 Python3.7 为我的项目实现一个简单的负载均衡器。

我使用 aqueue.PriorityQueue来保存一组预定义的工人。工人在队列中的顺序由他们的每个负载定义,该负载是根据分配给工人的作业数量来评估的。也就是说,有一个jobs属性是 Job 实例的列表,并且加载是由jobs.

作业分配的每次迭代,通过检索负载最低(作业数量最少)的工人,queue.get()分配后,它将put回到队列中。

这是简化的片段。

import attr
from typing import List

from .job import Job

@attr.s(order=True)
class Worker:
    jobs: List[Job] = attr.ib(factory=list, order=False)

    @property
    def loading(self):  # how to make Worker comparable according to this property?
        return len(self.jobs)

我知道如果我自己添加那些用于比较的 dunder 方法,即__ne____lt__、和__le__,我可以实现这一点。__gt____ge__

但我的问题是,是否可以attrs根据计算属性使一个类具有可比性?如果可能的话,如何做到这一点?

4

1 回答 1

1

attrs不幸的是,目前没有对属性的直接支持。我认为您最好的选择是离开order=False并使用functools.total_ordering.

于 2020-01-28T15:02:35.060 回答