python实现进程调度优先级抢占式算法

import copy


# 优先级抢占式算法
class PC:
    name = None
    arrive_time = None
    process_time = None
    priority = None


pc_num = int(input("请输入进程的数量:"))
list_pc = []
for i in range(pc_num):  # 构造结构体,方便后面使用数据
    pc_temp = PC()
    pc_temp.name = input(f"请输入第{i + 1}号进程的名字")
    pc_temp.arrive_time = int(input(f"请输入第{i + 1}号进程抵达的时间:"))
    pc_temp.process_time = int(input(f"请输入第{i + 1}号的执行时间:"))
    pc_temp.priority = int(input(f"请输入第{i + 1}号的优先级:"))
    list_pc.append(pc_temp)
list_upcoming = copy.deepcopy(list_pc)  # 未抵达的进程
list_upcoming_name = [i.name for i in list_pc]  # 改小bug的补丁
list_processing = []  # 正在等待处理的进程
list_done = []  # 处理完的进程
time = 0
list_slice = []  # 记录每一秒做的事情
while len(list_done) != pc_num:  # 当所有进程都处理完时才结束
    for i, v in enumerate(list_pc):  # 同时使用index与value
        if v.arrive_time <= time and v.name in list_upcoming_name:
            print(f"time={time}时,进程{v.name}抵达")
            del list_upcoming_name[list_upcoming_name.index(v.name)]  # 从等待队列中取出进程
            list_processing.append(v)  # 将进程放入处理队列
            list_processing.sort(key=lambda p: p.priority, reverse=True)  # 使用sort于匿名函数将list_processing按照优先级大小排序
    if list_processing:  # 只要还有事情做就要接着做
        list_processing[0].process_time -= 1
        list_slice.append(list_processing[0].name)
        if list_processing[0].process_time == 0:
            print(f"time={time + 1}时,进程{list_processing[0].name}完成")  # time要+1,因为这里预判这个时间片的工作
            list_done.append(list_processing[0])  # 将进程标为“执行完毕”
            del list_processing[0]  # 从执行队列中取出执行完毕的进程
    else:
        list_slice.append("Do nothing")
    time += 1
print(f"总耗时为{time},时间片记录为:{list_slice}")

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值