【问题标题】:disambiguating simpy multi event results消除简单的多事件结果
【发布时间】:2016-02-02 19:13:52
【问题描述】:

我正在尝试在 simpy 中编写一个简单的多路复用器,作为网络建模练习的一部分。我有两个商店,s1 和 s2,我希望通过标准 Store.get() 方法等待 s1 和 s2 中的一个或两个返回“数据包”。这确实有效,但我无法确定这两家商店中的哪个实际上返回了数据包。这样做的正确方法是什么 - 通过在下面的代码中插入适当的代码而不是注释?

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)

【问题讨论】:

    标签: python-2.7 simpy


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多