在python中实现最短的作业优先调度

时间:2018-10-04 14:13:19

标签: python sorting heap scheduling

当我寻找有效的SJF实现时,我找到了这篇文章。

Implementation of Shortest Job First (SJF) Non-Preemptive CPU scheduling algorithm using C++

我做了如下代码的python版本:

class Schedule(object):
    def __init__(self, name, at, bt):
        self.name = name
        self.at = at
        self.bt = bt
        self.ct = 0


 def solution2(processes):
     pro = []
     for p in processes:
        pro.append(Schedule(p[0], p[1], p[2]))
     pro.sort(key=lambda x: x.at)
     pro[0].ct = pro[0].bt + pro[0].at

     for j in range(1, len(processes)):
         ab = pro[j-1].ct

         # partial sorting  <-------------- right here !!!!
         waitings = list(filter(lambda x: x.at <= ab, pro[j:]))
         pro[j:j+len(waitings)] = sorted(waitings, key=lambda x: x.bt)
         # partial sorting end

         if pro[j-1].ct < pro[j].at:
             pro[j].ct = pro[j-1].ct + pro[j].bt + pro[j].at - pro[j-1].ct
         else:
             pro[j].ct = pro[j-1].ct + pro[j].bt

在上面的代码中,我想知道是否有更多的pythonic方法实现了我命名的“部分排序”。

看起来C ++版本的排序更容易理解。

bool compare2(schedule a,schedule b)
{
    return a.bt < b.bt && a.at <= ab;
}
/* call from main function */
sort(pro+i,pro+n,compare2);

更新:我对以下问题有一些提示。所以我删除了。
其他问题: 实际上,我正在使用python中的'heapq'寻找SJF的示例代码。 如果您向我展示如何在这种情况下应用“ heapq”,将不胜感激。 像上述情况一样,进程的到达时间应该是可变的。

0 个答案:

没有答案