From e4ff39be0f618efc8717249858ec82d65cac9b57 Mon Sep 17 00:00:00 2001 From: Youngjoon Lee <5462944+youngjoon-lee@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:23:45 +0900 Subject: [PATCH] do not use simpy. just use asyncio --- mixnet/sim/config.py | 8 +++----- mixnet/sim/config.yaml | 7 +++---- mixnet/sim/main.py | 3 ++- mixnet/sim/simulation.py | 8 +++----- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/mixnet/sim/config.py b/mixnet/sim/config.py index a751b52..d7f0673 100644 --- a/mixnet/sim/config.py +++ b/mixnet/sim/config.py @@ -5,7 +5,6 @@ from dataclasses import dataclass import dacite import yaml from pysphinx.sphinx import X25519PrivateKey -from simpy.core import SimTime from mixnet.config import NodeConfig @@ -33,14 +32,13 @@ class Config: @dataclass class SimulationConfig: - running_time: SimTime + duration_sec: int def validate(self): - # SimTime supports float but better to use int for time accuracy - assert isinstance(self.running_time, int) and self.running_time > 0 + assert self.duration_sec > 0 def description(self): - return f"running_time: {self.running_time}" + return f"running_secs: {self.duration_sec}" @dataclass diff --git a/mixnet/sim/config.yaml b/mixnet/sim/config.yaml index 87b52e6..ef5b05d 100644 --- a/mixnet/sim/config.yaml +++ b/mixnet/sim/config.yaml @@ -1,7 +1,6 @@ simulation: - # The simulation uses a virtual time (integer). Please see README for more details. - running_time: 300 + duration_sec: 10 mixnet: - num_nodes: 100 - transmission_rate_per_sec: 10 + num_nodes: 5 + transmission_rate_per_sec: 1 diff --git a/mixnet/sim/main.py b/mixnet/sim/main.py index a9384d7..11389d5 100644 --- a/mixnet/sim/main.py +++ b/mixnet/sim/main.py @@ -1,4 +1,5 @@ import argparse +import asyncio from mixnet.sim.config import Config from mixnet.sim.simulation import Simulation @@ -15,6 +16,6 @@ if __name__ == "__main__": config = Config.load(args.config) sim = Simulation(config) - sim.run() + asyncio.run(sim.run()) print("Simulation complete!") diff --git a/mixnet/sim/simulation.py b/mixnet/sim/simulation.py index ccdca7c..c3d9c05 100644 --- a/mixnet/sim/simulation.py +++ b/mixnet/sim/simulation.py @@ -1,7 +1,6 @@ +import asyncio import random -import simpy - from mixnet.config import MixMembership, NodeInfo from mixnet.node import Node from mixnet.sim.config import Config @@ -11,8 +10,8 @@ class Simulation: def __init__(self, config: Config): random.seed() self.config = config - self.env = simpy.Environment() + async def run(self): # Initialize mixnet nodes and establish connections node_configs = self.config.mixnet.node_configs() membership = MixMembership( @@ -22,5 +21,4 @@ class Simulation: for i, node in enumerate(nodes): node.connect(nodes[(i + 1) % len(nodes)]) - def run(self): - self.env.run(until=self.config.simulation.running_time) + await asyncio.sleep(self.config.simulation.duration_sec)