コールバックからシミュレーション コード (イベントの待機を含む) を作成するにはどうすればよいですか?
プロセスを可能な限り単純な例に縮小すると、simpy シミュレーションでイベントが発生したときに実行可能コードを開始したいと考えています。私がしたことは、その実行可能コードをイベントのコールバックとして設定することでした。その実行可能コード自体には、いくつかの単純なイベント処理、特にタイムアウトがあります。私の実際のコードでは、これはプロセス内で発生しますが、この単純化されたバージョンでevent
は、主に同じ問題の動作が表示されます。
import simpy
if __name__ == '__main__':
env = simpy.Environment()
def simulationRun(event):
print("Starting a run at time [%i]" % env.now)
yield env.timeout(5)
print("Ending a run at time [%i]" % env.now)
event = env.timeout(5)
event.callbacks.append(simulationRun)
print("Starting simulation.")
env.run(20)
print("End of simulation.")
私の予想される出力は次のとおりです。
Starting simulation.
Starting a run at time [5]
Ending a run at time [10]
End of simulation.
ただし、私の実際の出力は次のとおりです。
Starting simulation.
End of simulation.
yield コマンドを削除すると、次のようになります。
Starting simulation.
Starting a run at time [5]
Ending a run at time [5]
End of simulation.
コールバックが正しく設定されていることは明らかですが、要点は でタイムアウトをシミュレートすることsimulationRun
です。コールバックからコードでシミュレーション コード (イベントの待機を含む) を実行するにはどうすればよいですか?
これは Python 3.4.2 と simpy を使用します。