我正在使用Simpy 模拟器的SimEvent类来定义一些事件(比如a,b,c)。现在我有一个等待事件a、b和c的进程,如下所示。
yield waitevent, self, (a, b, c)
一旦发生这些事件中的任何一个,该过程将被重新激活。在我的情况下,事件可以发生多次。即两个或多个进程可以在同一仿真时间调用a.signal() 。如果,假设事件a发生 3 次,我如何获得该信息?eventsFired数组是否重复了相同的事件?
一个事件只能在给定时刻触发一次(即在模拟时间向前移动之前)。如果 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