0

Simpy シミュレーターのSimEventクラスを使用して、いくつかのイベント ( a,b,cなど) を定義しています。以下に示すように、イベントa、bcを待機するプロセスがあります。

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

これらのイベントのいずれかが発生すると、プロセスが再アクティブ化されます。私の場合、イベントは複数回発生する可能性があります。つまり、2 つ以上のプロセスが同じシミュレーション時間に a.signal() を呼び出すことができます。たとえば、イベントaが 3 回発生した場合、その情報を取得するにはどうすればよいですか? eventsFired配列に同じイベントが繰り返されていますか?

4

1 に答える 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 に答える