2016-02-02 2 views
1

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

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) 

ответ

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