我来自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()
答案 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,您可以通过将对象推送到它来通知(触发),该对象在通知时指定的延迟时可用于消费线程。 (触发陈述)时间。