我在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。所以第一个输出是错误的,之后它排序了!
提前感谢您的帮助。
答案 0 :(得分:3)
这是对的。当“3”请求资源时,它是空的,所以它得到了 插槽。剩下的进程必须排队并将获取资源 订购1,2,4,5。
如果你使用PreemptiveResource(比如request(priority=id,
preempt=True)
),3仍然会先获得资源,但会被抢占
2. 2然后将被抢占1. 2和3然后必须要求
资源再次访问它。
答案 1 :(得分:0)
即使我有同样的问题,我应该建立一个工厂FIFO。那时我给一个部分分配了一个反应时间,并让它跟随前一部分。这只是前一部分已经投入资源服务,我做了下一部分请求。它客观地解决了这个问题,但似乎它减慢了模拟的速度,并且还给了部件一个rexn时间。这基本上是对工厂流程的改造。但是,当部件不必再次请求时,我很乐意看到一个功能。 可以在现有版本中完成吗?