Я иду из мира SystemC, и я пытаюсь сделать что-то простое в Python. Интересно, имеет ли Python нечто похожее на peq_with_get() (из SystemC), которое в основном представляет собой очередь, которая сохраняет все триггеры, сделанные для события. Я разработал следующий код, чтобы проверить его, но он, похоже, не работает. Удивление, если вы, ребята, можете мне помочь, чтобы узнать, что у simter есть очереди событий или нет.Очередь событий в 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()
Привет, Амир, я не уверен, что понял, что вы имеете в виду под «очередями событий». Я понятия не имею о SystemC. Вы наклеиваете код выше, имеет несколько проблем: (a) вы никогда не запускаете исходное событие 'self.event_trig', которое ожидает' _submit_loop() '. (b) В '_complete_loop()' вы создаете несколько событий timeout() и привязываете их к 'self.event_trig'. Это не изменяет событие, ожидаемое '_submit_loop()'. Тайм-ауты просто попадают в очередь, и больше никто не заботится. (c) 'self.even_recv' никогда не будет запущен, так как' self.event_trig' также не запускается. –
Привет, Стефан, Спасибо за ответ. То, что вы упомянули, именно то, что я испытываю. То, что я хочу сделать, - это ускорить время моделирования, а не идти в блокировку. Я имею в виду самостоятельно генерировать события в разы 5, 6 и 7 и запускать _submit_loop в это время. Затем возобновите _complete_loop, чтобы сгенерировать больше триггеров. Подумайте об этом как о контейнере событий, который может помещать в очередь события, и как только время моделирования достигнет головы очереди, оно вызывает процесс ожидания. Имеет ли это смысл? Я заметил, что есть конструкция Store, которая делает что-то подобное. Но не прямолинейно. – Amir
BTW, мне действительно интересно, почему self.evet_trig не запускается. Моему понимаю self.env.timeout() создает и событие. Я думал, что если self.event_trig будет равен таймауту, он будет запущен. Благодарю. – Amir