2016-08-28 1 views
0

Я только начинаю работать над симуляцией событий, и у меня возникают некоторые проблемы с мониторингом очереди.Размер очереди представляется размером ENV в SimPy

Кажется, что каждый раз, когда я проверяю очередь, на самом деле отображается Env.now. Любой совет?

import simpy 

num_of_machines = 2 

env = simpy.Environment() 
bcs = simpy.Resource(env, capacity=num_of_machines) 

def monitor(resource): 
    """This is our monitoring callback.""" 

    print('Queue size: %s' % len(resource.queue)) 

def process_client(env, name): 

    with bcs.request() as req: 
     yield req 
     print('%s starting to charge at %s' % (name, env.now)) 
     yield env.timeout(90) 
     print('%s ending charge at %s' % (name, env.now)) 
     monitor(bcs) 



def setup(env): 
    i = 0 

    while True: 
     i += 1 
     yield env.timeout(1) 

     env.process(process_client(env, ('Car %s' % i))) 

env.process(setup(env)) 

env.run(until=300) 

Результаты:

Car 1 starting to charge at 1 
Car 2 starting to charge at 2 
Car 1 ending charge at 91 
Queue size: 88 
Car 3 starting to charge at 91 
Car 2 ending charge at 92 
Queue size: 88 
Car 4 starting to charge at 92 
Car 3 ending charge at 181 
Queue size: 176 
Car 5 starting to charge at 181 
Car 4 ending charge at 182 
Queue size: 176 
Car 6 starting to charge at 182 
Car 5 ending charge at 271 
Queue size: 264 
Car 7 starting to charge at 271 
Car 6 ending charge at 272 
Queue size: 264 
Car 8 starting to charge at 272 
+0

Так что же ваша проблема? –

+0

Я пытаюсь выяснить, сколько машин в очереди ждет зарядки –

ответ

0

Вы нерест process_client() каждый временной шаг, поэтому, когда первый из этих процессов осуществляется через 90 шагов по времени, вы уже создали 90 новых процессов, которые выстраиваются в очередь. Таким образом, ваши цифры выглядят совершенно правильно.