2013-01-21 59 views
0

我使用SimEvent類Simpy模擬器來定義一些事件(如a,b,c)。現在我有一個等待事件a,bc的過程,如下所示。Simpy事件同時發生多次

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

一旦發生這些事件中的任何一個,就會重新激活該過程。在我的情況下,事件可以發生多次。即兩個或更多進程可以在相同的模擬時間處調用信號()。 如果發生事件一個發生3次,我如何獲取該信息?請問eventsFired數組是否有相同的事件重複?

+0

請考慮更新到的simpy 3的SimPy 2是舊的,過時的和無人維護。 –

回答

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 
+0

如果一次被解僱兩次,我如何獲得這些信息?我想區分a觸發一次,a觸發兩次等情況。您提到的代碼區分a和b,而不是發生一次和發生兩次 – AIB