Date Time Example
Imports
| from datetime import datetime, timedelta
from pydes import Component, Simulator
|
Define Model
| class State(Component):
def __init__(self, value):
self.value = value
class Process1(Component):
def __init__(self, sim: Simulator):
self.sim = sim
def main(self):
for _ in range(3):
self.sim.record(self.id, "waiting")
self.sim.sleep(timedelta(minutes=10))
self.sim.record(self.id, "waiting")
class Process2(Component):
def __init__(self, sim: Simulator, state: State):
self.sim = sim
self.state = state
def main(self):
for _ in range(3):
self.sim.record(self.id, "waiting")
self.sim.sleep(timedelta(minutes=2))
self.sim.record(self.id, "waiting")
self.sim.record(state.id, "change state")
self.state.value = True
class Process3(Component):
def __init__(self, sim: Simulator, state: State):
self.sim = sim
self.state = state
def main(self):
self.sim.record(self.id, "wait state")
self.sim.wait_for(lambda: self.state.value)
self.sim.record(self.id, "wait state")
|
Run Simulation
| now = datetime.now()
sim = Simulator(init=datetime.now())
state = State(value=False)
p1 = Process1(sim)
p1_1 = Process1(sim)
p2 = Process2(sim, state)
p3 = Process3(sim, state)
sim.schedule(p1.main)
sim.schedule(p1_1.main, at=now + timedelta(minutes=1))
sim.schedule(p2.main, at=now + timedelta(minutes=10))
sim.schedule(p3.main)
sim.run(until=datetime.max)
|
| ------------------------------ | --------------- | ---------------------------------------- | ------------------------------ |
| time | component | value | description |
| ------------------------------ | --------------- | ---------------------------------------- | ------------------------------ |
| | | | |
| 2024-11-10 14:34:27.980073 | Process1.0 | waiting | None |
| 2024-11-10 14:34:27.980073 | Process3.0 | wait state | None |
| 2024-11-10 14:35:27.980070 | Process1.1 | waiting | None |
| 2024-11-10 14:44:27.980070 | Process2.0 | waiting | None |
| 2024-11-10 14:44:27.980073 | Process1.0 | waiting | None |
| 2024-11-10 14:44:27.980073 | Process1.0 | waiting | None |
| 2024-11-10 14:45:27.980070 | Process1.1 | waiting | None |
| 2024-11-10 14:45:27.980070 | Process1.1 | waiting | None |
| 2024-11-10 14:46:27.980070 | Process2.0 | waiting | None |
| 2024-11-10 14:46:27.980070 | Process2.0 | waiting | None |
| 2024-11-10 14:48:27.980070 | Process2.0 | waiting | None |
| 2024-11-10 14:48:27.980070 | Process2.0 | waiting | None |
| 2024-11-10 14:50:27.980070 | Process2.0 | waiting | None |
| 2024-11-10 14:50:27.980070 | State.0 | change state | None |
| 2024-11-10 14:50:27.980070 | Process3.0 | wait state | None |
| 2024-11-10 14:54:27.980073 | Process1.0 | waiting | None |
| 2024-11-10 14:54:27.980073 | Process1.0 | waiting | None |
| 2024-11-10 14:55:27.980070 | Process1.1 | waiting | None |
| 2024-11-10 14:55:27.980070 | Process1.1 | waiting | None |
| 2024-11-10 15:04:27.980073 | Process1.0 | waiting | None |
| 2024-11-10 15:05:27.980070 | Process1.1 | waiting | None |