do not use simpy. just use asyncio

This commit is contained in:
Youngjoon Lee 2024-06-27 17:23:45 +09:00
parent 9a46622b37
commit e4ff39be0f
No known key found for this signature in database
GPG Key ID: 09B750B5BD6F08A2
4 changed files with 11 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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!")

View File

@ -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)