Discrete-event simulation framework
Project description
DSSim — Discrete-Event Simulation Framework
DSSim is a Python framework for discrete-event simulation (DES). It advances time by jumping from one scheduled event to the next, making it well-suited for modelling systems where behavior is driven by events: hardware protocols, queuing systems, resource contention, multi-process coordination, and more.
Full documentation: majvan.github.io/DSSim
Who It Is For
DSSim targets a wide audience — not just software engineers:
- Hardware engineers — describe bus protocols, pipeline stages, and signal flows using component endpoints wired together, close to how hardware is assembled.
- Scientists and researchers — model experiments, queuing phenomena, or multi-agent systems without writing a scheduler from scratch.
- Software engineers — build process-oriented models using Python generators and coroutines with familiar async idioms.
Key Features
- Two layer profiles —
LiteLayer2for maximum throughput;PubSubLayer2for routing-rich pub/sub with delivery tiers, condition filtering, and composable filter circuits. - Any Python object as an event — no base class, no wrapping required.
- Timeout on every blocking call —
wait,get,put,sleepall accepttimeout;Noneis the universal "nothing happened" sentinel. - Condition filtering — wake a process only when an event matches a predicate, a filter, a circuit of filters (AND/OR/reset), or a future's completion. No spurious wakeups in PubSubLayer2.
- Publisher-subscriber with tiers — PRE (observe), CONSUME (first-accept wins), POST_HIT, POST_MISS.
- Built-in components —
DSQueue,DSResource,DSPriorityResource,DSContainer,DSState,DSTimer, and hardware models (UART, etc.). - Probes and statistics — attach
QueueStatsProbe/ResourceStatsProbewithout modifying component code; custom probe types supported. - SimPy / salabim / asyncio shims — migrate existing models without rewriting; migrated code and native DSSim code share the same event loop.
- No external dependencies — stdlib only at the core.
Quick Start
pip install dssim
from dssim import DSSimulation, LiteLayer2
sim = DSSimulation(layer2=LiteLayer2)
async def producer():
for i in range(3):
print(f"t={sim.time} produce {i}")
await sim.wait(2)
async def consumer():
for _ in range(3):
event = await sim.wait(3)
print(f"t={sim.time} tick")
sim.schedule(0, producer())
sim.schedule(0, consumer())
sim.run(until=10)
For local development from source, use editable mode:
pip install -e .
More examples in examples/lite/ and examples/pubsub/.
Choosing a Profile
| Situation | Profile |
|---|---|
| Small or exploratory project | PubSubLayer2 (default) |
| Debugging, probes, condition filtering needed | PubSubLayer2 |
| Maximum throughput is the primary goal | LiteLayer2 |
| Unsure | Start with LiteLayer2; switch when you hit the first blocker |
sim = DSSimulation() # PubSubLayer2 — default
sim = DSSimulation(layer2=LiteLayer2) # LiteLayer2
Switching is a one-line change at construction time.
Documentation
Full documentation: majvan.github.io/DSSim
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dssim-1.0.1.tar.gz.
File metadata
- Download URL: dssim-1.0.1.tar.gz
- Upload date:
- Size: 127.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11a072e42dc1f9b535306add17ad194d0a3946defdf18db972c9d2a442739bc2
|
|
| MD5 |
985da7d4950d4039e63da5c4c33de455
|
|
| BLAKE2b-256 |
4e1c2167f8925a635ceadbb393b69dc63bc395abec155ffce12c9a11c963d31f
|
File details
Details for the file dssim-1.0.1-py3-none-any.whl.
File metadata
- Download URL: dssim-1.0.1-py3-none-any.whl
- Upload date:
- Size: 105.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e5d906f8439aca9452c299c247afdf097547aa5c00529c9b50633c49e3500c0
|
|
| MD5 |
7ac5fe19f25d4bcfb600c4b0004e99ef
|
|
| BLAKE2b-256 |
c3af117042399f89c8540de567ee5289b4c49eba3658be801932e7d49bbd24f0
|