1

ネットワーク モデリング演習の一環として、簡単なマルチプレクサを simpy でコーディングしようとしています。私が持っているのは、s1 と s2 の 2 つのストアで、s1 と s2 の一方または両方が標準の Store.get() メソッドを介して「パケット」を返すのを待つ単一の yield を実行したいと考えています。これは機能しますが、2 つのストアのどちらが実際にパケットを返したかを判断できませ。以下のコードにコメントの代わりに適切なコードを挿入することによって、これを行う正しい方法は何ですか?

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)
4

1 に答える 1

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
于 2016-03-03T15:35:02.307 に答える