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. В то время я назначил время реакции для части и сделал это, чтобы следовать предыдущей части. То есть, только если предыдущая часть попала в сервис ресурса, я сделал запрос на следующую часть. Это решило проблему объективно, но казалось, что это немного замедлило симуляцию, а также дало время на роль. Это было в основном обновление заводского процесса. Но я хотел бы увидеть функцию, когда часть не должна запрашивать снова. Можно ли это сделать в настоящей версии?

Другие вопросы по тегам