Python SimPy: выход env.timeout не работает - PullRequest
0 голосов
/ 31 марта 2020

Я только начинаю с SimPy, так что, может быть, мне здесь не хватает чего-то важного. У меня есть очень простой процесс, который я хочу просто увеличивать число раз в секунду.

class Simulation:
    def __init__(self):
        self.env = simpy.Environment()
        thing = Thing()
        p = self.env.process(thing.go(self.env))
        self.env.run()

simulation = Simulation()
class Thing():
    def __init__(self):
        self.x = 1

    def go(self,env):
        while True:
            self.x = self.x + 1
            print("Current value: {}".format(self.x))
            yield env.timeout(1)

Время ожидания здесь игнорируется. Неважно, какое значение я передаю в качестве задержки или я включаю строку вообще, x увеличивается с той же скоростью (более 1 миллиона в течение секунд)

1 Ответ

0 голосов
/ 22 апреля 2020

Вы, кажется, путаете реальное время с сим-временем. В вашем заявлении на печать укажите текущее время (env.now). Вы должны получить что-то вроде этого:

Current value: 2 , time now: 0
Current value: 3 , time now: 1
Current value: 4 , time now: 2
Current value: 5 , time now: 3
:

Итак, вы можете видеть, что часы симуляции увеличиваются, как и должно быть; симуляция просто очень быстрая. Если вы хотите работать в режиме реального времени, не используйте simpy.environment (). Вместо этого используйте simpy.rt.RealTimeEnvironment (). Подробнее смотрите здесь: https://simpy.readthedocs.io/en/latest/topical_guides/real-time-simulations.html

...