Я недавно скачал и установил Anaconda / Spyder с Python 3.6-64 бит на компьютере Win10 и установил просто, чтобы попытаться узнать больше о моделировании дискретных событий.Я новичок в простой, Python и объектно-ориентированной программе, поэтому мой вопрос может показаться довольно глупым.
Одним из первых примеров в документации является пример машины, прерванный другим процессом.Я скопировал этот пример (показанный ниже) и успешно запустил его.Но если я изменил тайм-аут в функции драйвера с 3 на 6, скрипт вылетает.То, как я думал, что симуляция будет продолжаться со временем прерывания 6, будет состоять в том, что прерывание произойдет во втором событии зарядки, которое начинается во время = 5.Вместо этого скрипт вылетает со следующим выводом.Может кто-нибудь объяснить мне, почему это не работает?
Ошибка
runfile ('C: / Users / admin / Documents / Python Scripts / /carSimInterruptRevA.py ', wdir =' C: / Users / admin / Documents / Python Scripts ') Начать парковку и зарядку с 0 Начать движение с 5 Traceback (последний вызов был последним):
File "", строка1 в runfile ('C: / Users / admin / Documents / Python Scripts / carSimInterruptRevA.py', wdir = 'C: / Users / admin / Documents / Python Scripts')
Файл "C: \Users \ admin \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 668, в исполняемом файле исполняемого файла (имя файла, пространство имен)
Файл" C: \ Users \ admin \ Anaconda3 \ lib\ site-packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 108, в execfile exec (compile (f.read (), filename, 'exec'), пространство имен)
Файл" C: / Users "/ admin / Documents / Python Scripts / carSimInterruptRevA.py ", строка 38, в env.run (до = 30)
Файл" C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ simpy \ "core.py ", строка 138, в прогоне self.step ()
Файл "C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ simpy \ core.py", строка 230, в шаге повышение exc
Прерывание: Прерывание (Нет) I
Пример кода
import simpy
def driver(env, car):
yield env.timeout(3)
car.action.interrupt()
class Car(object):
def __init__(self, env):
self.env = env
self.action = env.process(self.run())
def run(self):
while True:
print('Start parking and charging at %d' % self.env.now)
charge_duration = 5
# We may get interrupted while charging the battery
try:
yield self.env.process(self.charge(charge_duration))
except simpy.Interrupt:
# When we received an interrupt, we stop charging and
# switch to the "driving" state
print('Was interrupted. Hope, the battery is full enough ...')
print('Start driving at %d' % self.env.now)
trip_duration = 2
yield self.env.timeout(trip_duration)
def charge(self, duration):
yield self.env.timeout(duration)
env = simpy.Environment()
car = Car(env)
env.process(driver(env, car))
env.run(until=30)