SimPy中的事件队列

时间:2016-09-01 00:26:01

标签: events event-handling simpy event-queue

我来自SystemC世界,我正在尝试用Python编写简单的代码。我想知道Python是否有类似于peq_with_get()(来自SystemC)的东西,它基本上是一个队列,它保留了对事件的所有触发器。 我开发了以下代码来测试它,但它似乎没有工作。想知道你们是否可以指导我了解是否有事件排队。

import simpy

SIM_DURATION = 100

class SomeClass(object):

    def __init__(self, env):
        self.env = env
        self.event_trig     = self.env.event()
        self.event_recvd    = self.env.event()

        simpy.events.Process( self.env, self._submit_loop() )
        simpy.events.Process( self.env, self._complete_loop() )

    def _submit_loop(self):
        while True:
            print('Waiting to Receive the Trigger')
            yield self.event_trig
            print('Event Received at Time %d' % env.now )
            self.event_recvd.succeed()


    def _complete_loop(self):
        while True:
            print('Trigger at time %d' % (env.now + 5) )
            self.event_trig = self.env.timeout(5)
            print('Trigger at time %d' % (env.now + 6) ) 
            self.event_trig = self.env.timeout(6)
            print('Trigger at time %d' % (env.now + 7) ) 
            self.event_trig = self.env.timeout(7)
            yield self.event_recvd
            print('Current Time is %d. Wait for 10' % env.now)
            yield self.env.timeout(10)

print('Start Sim')
env = simpy.Environment()
someCls = SomeClass( env )
env.run()

1 个答案:

答案 0 :(得分:0)

我想到的是一个事件不能容纳多个触发点(我没有明确知道答案,但一切都表明了这一点)。 然而,在SystemC世界中等效的peq_with_get是simpy.Store(),可以通过在其“put”方法上定义进程来增强它。它不像peq_with_get那样直截了当,但它提供了相同的功能。 如果您点击此链接,您可以从代码段中获取更多信息: http://simpy.readthedocs.io/en/latest/examples/latency.html

只是添加一些关于peq_with_get功能的解释,它是一个Payload Event Queue,您可以通过将对象推送到它来通知(触发),该对象在通知时指定的延迟时可用于消费线程。 (触发陈述)时间。