Simpy:如何捕获简单进程的返回值

问题描述

想象一下我有这种情况:

def my_process(env,run_length):
    count = 0
    while True:
        env.timeout(1)
        count += 1
        if env.Now >= run_length:
            break

    return count

my_env = simpy.Environment()

count = my_env.process(my_process(my_env,100))

my_env.run(100)

如果我打印count的值,它将返回生成器本身,而不是我想要的生成器触发的事件数的计数。我可以将一个对象传递给my_process并根据计数更改其状态,但是没有其他方法吗?

非常感谢您!

解决方法

您应该使用 yield 和其他过程来获取返回值。 (环境的运行时间应大于100)。

import simpy

def my_process(env,run_length):
    count = 0;
    while True:
        yield env.timeout(1);
        count += 1;
        if env.now >= run_length:
            break;

    return count;

def first_process(env,run_length):
    return_value = yield env.process(my_process(env,run_length));
    print("return value: ",return_value);

my_env = simpy.Environment();
my_env.process(first_process(my_env,100));
my_env.run(101);

在simpy 4中输出:

return value:  100