<p>你的第一个密码就快到了</p>
<p>真正的问题是调度器的run方法中的这一行</p>
<pre><code>yield env.process(car.move())
</code></pre>
<p>你需要降低收益率</p>
<p>这种屈服会导致代码等待car.move()完成,然后循环并启动下一辆车</p>
<p>将代码更改为</p>
<pre><code>env.process(car.move())
</code></pre>
<p>这将异步运行car_move()进程</p>
<p>我做的另一件事是将运动向下移动到汽车上。每辆车都有自己的超时时间,这给了你一些选择,比如因为机械故障而中断一辆车。您还可以向car类添加一个参数,为每辆车提供不同的速度</p>
<p>请参见下面的代码</p>
<pre><code>import simpy
from itertools import cycle
class Dispatch():
def __init__(self, env, cars, startTime=0):
self.env = env
self.cars = cars
self.action = env.process(self.run(startTime))
def run(self,startTime):
# wait for start of race
yield self.env.timeout(startTime)
for car in self.cars:
# no yield here
env.process(car.move())
class Car():
def __init__(self, env, name, initial_location):
self.env = env
self.name = name
self.location = initial_location
self.path = iter(cycle(["A", "B", "C", "B"]))
def move(self):
# let each car move itself, more like a real car
while True:
print("{} is now at position {}, at time: {}".format(self.name, self.location, env.now))
yield env.timeout(1)
self.location = next(self.path)
env = simpy.Environment()
carA = Car(env, "carA", "A")
carB = Car(env, "carB", "A")
carC = Car(env, "carC", "A")
dispatcher = Dispatch(env, [carA,carB,carC])
env.run(until=20)
</code></pre>