私はロボティクスのシミュレーションのために simpy をいじっています.ping と pong と呼ばれる 2 つのラケットを使った簡単なピンポン ゲームを書くことから始めました. yield env.timeout(0)
1 人のプレーヤーが反対側のプレーヤーに自分のターンをキャッチする機会を提供できるようにするために を追加した場合にのみ、正常に機能します。このヌープ(?)をスキップすると、常に最初のプレーヤーがボールをつかみます。これが私のコードです:
import simpy
ball_wait = 1
def racket(env, name, ball):
while True:
# Let the first user catch the ball
with ball.request() as req: # Create a waiting resource
yield req # Wait and get the ball
# The time it takes for the ball to arrive. This can
# be used to plan the strategy of how to hit the ball.
yield env.timeout(ball_wait)
print env.now, name
# "Sleep" to get the other user have his turn.
yield env.timeout(0)
env = simpy.Environment()
ball = simpy.Resource(env, capacity = 1)
env.process(racket(env, 'Ping', ball))
env.process(racket(env, 'Pong', ball))
env.run(until=10)
print 'Done!'
私の質問は、なぜ必要なのenv.timeout(0)
ですか?また、2 つのプロセス間で制御を引き渡す他の (より良い?) 戦略があるのではないかと思います。私も遊んでいましprocess.interrupt()
たが、やり過ぎのように思えます。