2013-01-21 1 views
0

J'utilise SimEvent classe de simulateur Simpy pour définir certains événements (par exemple a, b, c). Maintenant, j'ai un processus qui attend les événements a, b et c comme indiqué ci-dessous.Simpy événements se produisant plusieurs fois en même temps

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

Une fois que l'un de ces événements se produisent, le processus sera réactivée. Dans mon cas, les événements peuvent avoir lieu plusieurs fois. c'est-à-dire que deux processus ou plus peuvent appeler a.signal() au même temps de simulation. Si, disons événement un se produit 3 fois, comment puis-je obtenir cette information? Est-ce que le tableau eventsFired a les mêmes événements répétés?

+0

S'il vous plaît envisager la mise à jour Simpy 3. Simpy 2 est vieux, hors daté et unmaintained . –

Répondre

1

Un événement ne peut être déclenché qu'une fois dans un moment donné (c'est-à-dire avant que le temps de simulation ne se déplace vers l'avant). Si a.signal() est appelé plusieurs fois, il restera activé. Il y a plusieurs façons de gérer ceci:

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' 

C'est si vous voulez qu'il réagisse indépendamment à chaque événement déclenché. Si elle n'a pas d'importance, et tout ce qui doit arriver est le code de procéder, la construction norme fera:

yield waitevent, self, (a, b, c) 
print 'event fired was', self.eventsFired[0].name 
+0

Si un est renvoyé deux fois, comment puis-je obtenir cette information? Je veux différencier le cas dans lequel a est déclenché une fois, a est déclenché deux fois, etc. Le code que vous avez mentionné fait la différence entre a et b, pas entre une occurrence unique et une occurrence double – AIB

Questions connexes