устранение неоднозначности простых результатов нескольких событий

Я пытаюсь написать простой мультиплексор в simpy как часть упражнения по моделированию сети. У меня есть два хранилища, s1 и s2, и я хочу сделать один yield, который ждет, пока один или оба из s1 и s2 вернут «пакет» с помощью стандартного метода Store.get (). Это действительно работает, но я не могу определить, какое из двух хранилищ действительно вернуло пакет. Как правильно это сделать - вставив соответствующий код вместо комментария в приведенный ниже код?

import simpy
env = simpy.Environment()
s1 = simpy.Store(env, capacity=4)
s2 = simpy.Store(env, capacity=4)

def putpkts():
    a =1
    b= 2
    s1.put(a)
    s2.put(b)
    yield env.timeout(40)
    s1.put(a)
    yield env.timeout(40)
    s2.put(b)
    yield env.timeout(40)

def getpkts():
    while True:
        stuff = (yield s1.get() |  s2.get() )
        # here, I need to put code to determine 
        # whether the 'stuff' dict
        # contains an item from store s1, or store s2, or both.
        # how can I do this?


proc1 = env.process(putpkts())
proc2 = env.process(getpkts())

env.run(until = proc2)

person djpwilk    schedule 02.02.2016    source источник


Ответы (1)


Вам нужно привязать событие Store.get() к имени, а затем проверить, есть ли оно в результатах, например:

get1 = s1.get()
get2 = s2.get()
results = yield get1 | get2
item1 = results[get1] if get1 in results else None
item2 = results[get2] if get2 in results else None
person Stefan Scherfke    schedule 03.03.2016