【问题标题】:Getting signalparam of Event in simpy在simpy中获取事件的信号参数
【发布时间】:2012-09-04 14:07:32
【问题描述】:

我正在使用 SimPy 进行基于时间的模拟。

我有一个 Messager 进程,它监听特定事件,并在该事件发生时返回该事件的参数:

class Messager(Process):
    def __init__(self):
        Process.__init__(self,'messager')

    def monitor(self):
        while True:
            yield waitevent, self, messageEvent
            print messageEvent.signalparam

messager = Messager()
activate(messager,messager.monitor())

这很好用。然而,实际上有不止一个事件应该由 Messager 处理,我希望 Messager 在事件列表中返回导致事件的信号参数:

messageEvents = [Event1,Event2,Event3]

class Messager(Process):
    def __init__(self):
        Process.__init__(self,'messager')

    def monitor(self):
        while True:
            yield waitevent, self, messageEvents
            .....

如何访问已发生事件的信号参数?

【问题讨论】:

  • 为什么 messageEvent.singalparam 不起作用????第二种情况有何不同?你能澄清一下吗?
  • 在第一种情况下,messageEvent 是带有信号参数的单个事件。在第二种情况下,messageEvents 是一个事件列表。我需要过滤触发 waitevent 的事件列表。我看不到这些事件的属性,这将使我能够确定这一点。
  • 所以将问题更改为:如何确定给定事件是否在 Python SimPy 中触发了 waitevent?
  • 这也不是我要问的(但实现相同目标的方法更长)。我想不出一个能概括整个问题的简短问题标题,所以我使用了一个稍微简单的标题。
  • 请考虑更新到 SimPy 3。SimPy 2 旧、过时且未维护。

标签: python simpy


【解决方案1】:

查看 simpy 的源代码,特别是 Simevent 类的源代码,如果您能以某种方式将事件转换为 Simevent 类,那么您应该能够从中获取属性信号参数。不确定这是否可行,但希望您知道一种方法。祝你好运。

编辑: 刚刚也想到了这一点,您可以编辑您的 simpy 并使 Simevent 类具有获取信号参数的功能。仅供参考,如果您想这样做,simevent 类位于 lib.py 文件中。

【讨论】:

  • 对不起,应该说清楚 - 我指的事件是 SimEvents,所以有信号参数函数。我只是无法过滤 SimEvents 来找出我想从哪一个读取信号参数!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
相关资源
最近更新 更多