Почему результат меняется после помещения кода в функцию в простом процессе?Python

Программы на Python
Ответить
Anonymous
 Почему результат меняется после помещения кода в функцию в простом процессе?

Сообщение Anonymous »

В простом процессе я обрабатываю простое прерывание. Я делаю это в двух местах и ​​поэтому хочу поместить код обработки в функцию. До помещения в функцию все работает хорошо, после помещения в функцию результаты разные.
Ниже написанный код

Код: Выделить всё

def offer(env, simpy_car, simpy_tankcar, route, timestep):
action = None
t_prev = -1
for lat in route:
try:
# fuel consumption during timestep unequal to one hour
# it is assumed that each simpy timestep equals one hour
t = env.now
fuel = simpy_car.power * (t - t_prev) * 3600 / (E_OIL * EFFICIENCY)
t_prev = t
yield env.process(simpy_car.consume(env, timestep, fuel, lat))
except sp.Interrupt as e:
action = e.cause
while True:
try:
if action == 'weather':
yield env.process(simpy_car.refuel(env, simpy_tankcar))
elif action == 'tanking':
yield env.process(simpy_car.tanking(env, simpy_tankcar))
simpy_car.status = 'DRIVING'
elif action == 'refuelling':
simpy_tankcar.status = 'DRIVING'
simpy_car.status = 'DRIVING'
action = None
break
except sp.Interrupt as e:
action = e.cause

try:
yield env.process(simpy_car.check_fuel(env, simpy_tankcar))
except sp.Interrupt as e:
action = e.cause
while True:
try:
if action == 'weather':
yield env.process(simpy_car.refuel(env, simpy_tankcar))
elif action == 'tanking':
yield env.process(simpy_car.tanking(env, simpy_tankcar))
simpy_car.status = 'DRIVING'
elif action == 'refuelling':
simpy_tankcar.status = 'DRIVING'
simpy_car.status = 'DRIVING'
action = None
break
except sp.Interrupt as e:
action = e.cause

yield from ()
Ниже код с функцией и вызовами функций

Код: Выделить всё

def process_interrupt(action, simpy_car, simpy_tankcar):
"""
State machine
"""
while True:
try:
if action == 'weather':
yield env.process(simpy_car.refuel(env, simpy_tankcar))
elif action == 'tanking':
yield env.process(simpy_car.tanking(env, simpy_tankcar))
simpy_car.status = 'DRIVING'
elif action == 'refuelling':
simpy_tankcar.status = 'DRIVING'
simpy_car.status = 'DRIVING'
action = None
break
except sp.Interrupt as e:
action = e.cause
return action

def offer(env, simpy_car, simpy_tankcar, route, timestep):
action = None
t_prev = -1
for lat in route:
try:
t = env.now
fuel = simpy_car.power * (t - t_prev) * 3600 / (E_OIL * EFFICIENCY)
t_prev = t
yield env.process(simpy_car.consume(env, timestep, fuel, lat))
except sp.Interrupt as e:
action = e.cause
action = process_interrupt(action, simpy_car, simpy_tankcar)

try:
yield env.process(simpy_car.check_fuel(env, simpy_tankcar))
except sp.Interrupt as e:
action = e.cause
action = process_interrupt(action, simpy_car, simpy_tankcar)

yield from ()
Я ожидаю, что обе версии дадут одинаковые результаты, но это не так. Что я делаю неправильно? Почему версия функции дает разные результаты?

Подробнее здесь: https://stackoverflow.com/questions/792 ... py-process
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»