0

我正在使用Simpy 模拟器的SimEvent类来定义一些事件(比如a,b,c)。现在我有一个等待事件a、bc的进程,如下所示。

yield waitevent, self, (a, b, c)

一旦发生这些事件中的任何一个,该过程将被重新激活。在我的情况下,事件可以发生多次。即两个或多个进程可以在同一仿真时间调用a.signal() 。如果,假设事件a发生 3 次,我如何获得该信息?eventsFired数组是否重复了相同的事件?

4

1 回答 1

1

一个事件只能在给定时刻触发一次(即在模拟时间向前移动之前)。如果 a.signal() 被多次调用,它将保持被触发。有几种方法可以处理这个问题:

yield waitevent, self, (a, b, c)
for ev in self.eventsFired:
    if ev == a:
        print 'a fired'
    elif ev == b:
        print 'b fired'
    elif ev == c:
        print 'c fired'
    else:
        print 'discontinuous event occured'

那就是如果您希望它独立响应每个触发的事件。如果这无关紧要,并且所要做的就是让代码继续执行,那么标准构造将执行以下操作:

yield waitevent, self, (a, b, c)
print 'event fired was', self.eventsFired[0].name
于 2013-12-16T14:04:50.470 回答