I am trying to work my self into simpy. Which uses python generators to create sim steps.
From the documentation for simpy state access.
import simpy
def subfunc(env):
print(env.active_process.name) # will print "my_proc"
def my_proc(env):
while True:
print(env.active_process.name) # will print "my_proc"
yield env.process(subfunc(env))
yield env.timeout(1)
env = simpy.Environment()
p1_result = env.process(my_proc(env))
print(type(env.active_process)) # None
env.step()
print(type(env.active_process)) # None
Is there an explenation why subfunc is printed out as my_proc ?
@AKX has been absolutly right
here a working code. With little boiler
import simpy
class NamedProcess:
def __init__(self, name):
self.process_name = name
def __call__(self, env):
return self.run(env)
class SubFunc(NamedProcess):
def run(self, env):
print(f"Subfunc process name: {self.process_name}")
yield env.timeout(1)
class MyProc(NamedProcess):
def run(self, env):
while True:
sub_proc = SubFunc("subfunc_process")
print(f"Main process name: {self.process_name}")
yield env.process(sub_proc(env))
print(f"Main process name: {self.process_name}")
yield env.timeout(1)
env = simpy.Environment()
my_proc = MyProc("my_proc")
p1_result = env.process(my_proc(env))
print(f"Process p1 created: {p1_result}")
print(type(env.active_process)) # None
env.step()
print(type(env.active_process)) # None
env.run(until=5)