2

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

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()
4

1 回答 1

0

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

只是添加一些关于 peq_with_get 功能的解释,它是一个有效负载事件队列,您可以通过将对象推送到它来通知(触发),该对象在通知中指定的延迟时可供消费线程使用(触发语句) 时间。

于 2016-09-12T16:18:26.980 回答