2

我在 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。所以第一个输出是错误的,然后是排序的!

在此先感谢您的帮助。

4

2 回答 2

3

这是对的。当“3”请求资源时,它是空的,所以它得到了槽。其余进程必须排队,并将按 1、2、4、5 的顺序获取资源。

如果您使用 PreemptiveResource 代替(如request(priority=id, preempt=True)),3 仍将首先获得资源,但将被 2 抢占。然后 2 将被 1 抢占。然后 2 和 3 必须再次请求资源才能访问它。

于 2014-05-14T14:18:21.217 回答
0

甚至我也有同样的问题,我应该制造一个工厂先进先出。那时我为一个部分分配了一个反应时间,并让它跟随前一个部分。只有在前一部分已经投入资源服务的情况下,我才提出下一部分请求。它客观地解决了这个问题,但似乎它稍微减慢了模拟速度,也给了零件一个 rexn 时间。它基本上是对工厂流程的改造。但是,当部件不必再次请求时,我希望看到一个功能。现在的版本可以实现吗?

于 2014-06-01T15:12:35.820 回答