实例化对象分段下载数据

有这样的类:
class IdleArc:
    def __init__(self,data):
        self.data=data
实例化弧段类arc1=IdleArc(2),arc2=IdleArc(5),arc3=IdleArc(7),arc4=IdleArc(4),arc5=IdleArc(5)
这些实例化后的弧段按照上面的顺序存放在列表arc_list中,有两个固存值fix1=13,fix2=8,先在弧段中寻找满足首次加和大于13的弧段
然后再继续寻找首次加和大于8的弧段,选择的结果应该是,arc1,arc2,arc3,满足大于13,
arc4,arc5满足大于8,被大于13的用过的弧段不能再继续使用。

下面代码是升级后的版本,考虑了0等极端的情况

class IdleArc:
    def __init__(self, data):
        self.data = data
        self.datasource=None


arc_list = []
arc_list.append(IdleArc(2))
arc_list.append(IdleArc(5))
arc_list.append(IdleArc(7))
arc_list.append(IdleArc(4))
arc_list.append(IdleArc(5))

def storage_find_used_arc(arc_list_calc,data_value,datasourace=None):#,给定固存或者交换机的数据量,给定出数据是固存还是交换机的
    #固存找到使用的弧段
    #如果要下载的数据为0,直接返回空
    #如果弧段为空,直接不用计算了,数据被消耗为0,数据剩余为数据的大小
    sum_data = 0
    consum_data = 0  # 任务被消耗的数据
    residue_data = 0  # 固存中剩余的数据量
    find_used_arc = []

    if len(arc_list_calc)==0: #没有弧段
        residue_data=data_value
        print(f"弧段个数为0,没有消耗数据,消耗数据{consum_data},剩余数据{residue_data}")
        return find_used_arc,consum_data,residue_data
    if data_value==0: #若没有数据,那么选中的弧段为0,消耗数据为0,剩余数据为0
        return find_used_arc, consum_data, residue_data

    if data_value == 0:
        return find_used_arc
    for arc in arc_list_calc:
        sum_data += arc.data
        arc.datasource = datasourace
        find_used_arc.append(arc)
        #说明弧段足够多,可以把数据下载下来
        if sum_data >=data_value: #等号放在这里
            print(f"数据已经下载完毕,消耗数据{consum_data},剩余数据{residue_data}")
            consum_data=data_value
            residue_data=data_value-consum_data  # 固存中剩余的数据量
            break
        else:#说明弧段不够,还剩下了数据
            consum_data=sum_data
            residue_data = data_value - consum_data
            print(f"弧段不够数据还有剩余,消耗数据{consum_data},剩余数据{residue_data}")

    return find_used_arc,consum_data,residue_data #固存中剩余的数据量

fix1 = 18
fix2 = 0
result1 = []
result2 = []

copy_arc_list_1=arc_list[:]
result1,consum_data1,residue_data1 =storage_find_used_arc(copy_arc_list_1, fix1, datasourace=0)

copy_arc_list_2=[arc for arc in arc_list if arc not in result1 ]
result2,consum_data2,residue_data2 = storage_find_used_arc(copy_arc_list_2,fix2,datasourace=1)

a=result1
c=consum_data1
d=residue_data1

b=result2
e=consum_data2
f=residue_data2
e=3
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值