Я работаю с простой симуляцией с Simpy и Python.
Моя цель - иметь ресурс, который может быть 1 за один раз, и подсчитать все остальные процессы, ожидающие освобождения этого ресурса.
Пример:
Person 1 comes, takes the resource. waiting is 0
Person 2 arrives, waits. waiting is 1
Person 3 arrives, waits. waiting is 2
Person 1 leaves, releasing resource, so now Person 2 takes it. waiting is 1
Это мой код:
import simpy
def env1(env):
res = simpy.Resource(env,capacity=1)
while True:
yield env.timeout(5)
print("Arriving Person at ",(env.now))
env.process(getResource(env, res))
def getResource(env,res):
with res.request() as req:
yield req
print("Person using resource at ", env.now)
yield env.timeout(20)
print("Leaving at ", env.now)
Вызов симуляции
env = simpy.Environment()
env.process(env1(env))
env.run(until=500)
Я пытался использовать метод .get_queue, но он всегда пуст.
Использование .queue, кажется, всегда добавляет элементы, но никогда не удаляет их из очереди.
Я также пытался использовать методы put и release, но, похоже, ничего не работает.
Я не правильно понимаю, как работают эти методы и как этого добиться.
Есть идеи?
Спасибо!