【问题标题】:Simpy 3.0.4, setting resource prioritySimpy 3.0.4,设置资源优先级
【发布时间】:2025-11-27 10:10:02
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

    标签: simulation simpy


    【解决方案1】:

    这是正确的。当“3”请求资源时,它是空的,所以它得到 投币口。剩余的进程必须排队并且将在 顺序 1、2、4、5。

    如果您改用 PreemptiveResource(如request(priority=id, preempt=True)),3 仍然会先获取资源,但会被 2. 然后 2 将被 1 抢占。 然后 2 和 3 将不得不请求 再次获取资源以访问它。

    【讨论】:

      【解决方案2】:

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

      【讨论】: