Simpy 3.0.4,设置资源优先级

时间:2014-05-14 09:51:15

标签: simpy

我在simpy中遇到资源优先级问题。请考虑以下代码:

import simpy

env = simpy.Environment()
res = simpy.PriorityResource(env, capacity = 1)

def go(id):
    with res.request(priority = id) as req:
        yield req
        print id,res

env.process(go(3))
env.process(go(2))
env.process(go(4))
env.process(go(5))
env.process(go(1))
env.run()

数字越小意味着优先级越高,所以我应该得到1,2,3,4,5。但相反,我得到3,1,2,4,5。所以第一个输出是错误的,之后它排序了!

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这是对的。当“3”请求资源时,它是空的,所以它得到了 插槽。剩下的进程必须排队并将获取资源 订购1,2,4,5。

如果你使用PreemptiveResource(比如request(priority=id, preempt=True)),3仍然会先获得资源,但会被抢占 2. 2然后将被抢占1. 2和3然后必须要求 资源再次访问它。

答案 1 :(得分:0)

即使我有同样的问题,我应该建立一个工厂FIFO。那时我给一个部分分配了一个反应时间,并让它跟随前一部分。这只是前一部分已经投入资源服务,我做了下一部分请求。它客观地解决了这个问题,但似乎它减慢了模拟的速度,并且还给了部件一个rexn时间。这基本上是对工厂流程的改造。但是,当部件不必再次请求时,我很乐意看到一个功能。 可以在现有版本中完成吗?