2012-09-04 25 views
1

我正在使用SimPy進行基於時間的模擬。獲取事件的信號參數simpy

我有一個梅薩過程發生時監聽特定事件,並返回該事件的參數:

class Messager(Process): 
    def __init__(self): 
     Process.__init__(self,'messager') 

    def monitor(self): 
     while True: 
      yield waitevent, self, messageEvent 
      print messageEvent.signalparam 

messager = Messager() 
activate(messager,messager.monitor()) 

能正常工作。然而,在現實中有一個以上的事件應該由梅薩來處理,我想了Messager的返回signalparam的致病事件在事件列表:

messageEvents = [Event1,Event2,Event3] 

class Messager(Process): 
    def __init__(self): 
     Process.__init__(self,'messager') 

    def monitor(self): 
     while True: 
      yield waitevent, self, messageEvents 
      ..... 

我怎麼訪問signalparam事件發生了什麼?

+0

爲什麼messageEvent.singalparam不會工作????第二種情況有什麼不同?你能澄清嗎?在第一種情況下爲 –

+0

,messageEvent是帶有signalparam的單個事件。在第二種情況下,messageEvents是一個事件列表。我需要篩選觸發waitevent的事件列表。我無法看到這些事件的屬性,這將允許我確定這一點。 – meepmeep

+0

因此將問題改爲:如何確定給定的事件是否觸發了Python SimPy中的waitevent? –

回答

0

查看simpy的來源,特別是Simevent類的源代碼,如果您能以某種方式將事件轉換爲Simevent類,那麼您應該能夠從中獲取屬性信號參數。不知道這是否可能,但希望你知道一個方法來做到這一點。祝你好運。

編輯: 也想到這一點,你可以編輯你的simpy,並讓Simevent類有一個函數來獲取signalparam。僅供參考如果你想這樣做,simevent類位於lib.py文件中。

+0

對不起,應該已經說清楚了 - 我所指的事件是SimEvents,所以有signalparam函數。我只是不能過濾SimEvents來找出我想從哪一個讀取signalparam! – meepmeep