pythonsimpy

Simpy not showing other process name


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 ?


Solution

  • @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)