【发布时间】:2020-05-08 13:41:17
【问题描述】:
我正在使用 Python3.7 为我的项目实现一个简单的负载均衡器。
我使用queue.PriorityQueue 来保存一组预定义的工人。工人在队列中的顺序是由他们的每个负载定义的,这些负载是根据分配给工人的工作数量来评估的。也就是说,有一个jobs 属性,它是一个Job 实例的列表,并且加载是由jobs 的长度计算的。
作业分配的每次迭代,通过queue.get() 检索负载最低(作业数量最少)的工人,分配后,它将以put 返回队列。
这里是简化的 sn-p。
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 类具有可比性?
如果可能,如何实现?
【问题讨论】: