我在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。所以第一个输出是错误的,在它排序之后!
提前谢谢你的帮助。
发布于 2014-05-14 14:18:21
这是正确的。当"3“请求资源时,它是空的,因此它得到了插槽。剩下的进程必须排队,并按1、2、4、5的顺序获取资源。
如果您转而使用PreemptiveResource (如request(priority=id, preempt=True)),则3仍将首先获得资源,但将被抢占2.2,然后将被1.2抢占,然后3将不得不再次请求资源以获得对它的访问。
发布于 2014-06-01 15:12:35
就连我也遇到了同样的问题,我应该制造一个工厂的FIFO。当时,我给一个部件分配了一个反应时间,并使它遵循前一个部分。这是只有当上一部分已经服务的资源,我提出了下一部分的要求。它客观地解决了问题,但似乎放慢了模拟的速度,也给了部分时间。这基本上是对工厂流程的一次改造。但我想看到一个功能,当部分不需要再次要求。现在的版本能做到吗?
https://stackoverflow.com/questions/23651193
复制相似问题