Skip to content

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                           |