Simpy中“收益”的作用令人困惑

时间:2019-05-31 08:45:30

标签: python simpy

这是我的疑问

使用示例处理之前的函数时,该函数用于产生env.timeout(seconds),但在这里它会产生事件的实例(env.event())。 'yield self.class_ends'到底产生了什么? 我的代码在这里:

class School:
    def __init__(self, env):
        self.env = env
        self.class_ends = env.event()
        self.pupil_procs = [env.process(self.pupil()) for i in range(3)]
        self.bell_proc = env.process(self.bell())
    def bell(self):
        for i in range(2):
            yield self.env.timeout(45)
            self.class_ends.succeed()
            self.class_ends = self.env.event()
            print()
    def pupil(self):
        for i in range(2):
            print(r' \o/', end='')
            yield self.class_ends

env = simpy.Environment()
school = School(env)
env.run()

2 个答案:

答案 0 :(得分:0)

它产生一个env.event()。您定义了self.class_ends = env.event()以便返回它。如果希望它返回env.timeout(seconds),则应这样定义它。

答案 1 :(得分:0)

env.event()创建一个事件。

  

可能在某个时间点发生的事件。

     

一个事件

     
      
  • 可能会发生(:attr:triggeredFalse),
  •   
  • 将要发生(:attr:triggeredTrue)或
  •   
  • 发生过(:attr:processedTrue)。
  •   
     

每个事件都绑定到环境 env ,并且最初不是   触发。已安排事件由环境处理   由:meth:succeed 、: meth:fail触发后   :方法:trigger。这些方法还设置了 ok 标志和 value   活动的结束。

     

一个事件有一个:attr:callbacks列表。回调可以是任何   可召唤的。处理事件后,将调用所有回调   将事件作为单个参数。回调可以检查   通过检查 ok 成功完成了该事件,并通过   它产生的

     

失败的事件永远不会被静默忽略,并且会引发异常   经过处理。如果回调处理异常,则必须设置   :attr:defusedTrue来防止这种情况。

     

该类还实现了__and__()&)和__or__()   (|)。如果您使用其中一个运算符连接两个事件,则   :class:Condition事件已生成,可让您同时等待或   其中之一。