Simpy 3.0.4, установка приоритета ресурса
У меня проблемы с приоритетом ресурсов в 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 ответа
Это правильно. Когда "3" запрашивает ресурс, он пуст, поэтому получает слот. Остальные процессы должны стоять в очереди и получат ресурс в порядке 1, 2, 4, 5.
Если вы используете вместо этого PreemptiveResource (например, request(priority=id,
preempt=True)
), 3 все равно сначала получит ресурс, но будет вытеснен 2. 2 затем будет вытеснен 1. 2, а затем 3 придется запросить ресурс снова, чтобы получить к нему доступ.
Даже у меня была такая же проблема, когда я должен был сделать фабричный FIFO. В то время я назначил время реакции для части и сделал это, чтобы следовать предыдущей части. То есть, только если предыдущая часть попала в сервис ресурса, я сделал запрос на следующую часть. Это решило проблему объективно, но казалось, что это немного замедлило симуляцию, а также дало время на роль. Это было в основном обновление заводского процесса. Но я хотел бы увидеть функцию, когда часть не должна запрашивать снова. Можно ли это сделать в настоящей версии?