Replayable App Framework
Project description
Replayable App Framework
Goals
The primary goal of this package is to facilitate building data processing apps with emphasis on
- Flexibility - the app can be reconfigured for debugging, development or different purpose
- Intelligibility - it is easy to understand what the app will do
- Replayability - the app behavior can be reproduced using data captured in previous runs
Usage
Look in examples/simple.py
for a toy simple app that demonstrates how the package can be used.
Problems
Many opportunities for improvement can be foreseen but have not been implemented because
- a lack of time,
- insufficient value, or
- excessive cost.
This section documents what they are and some ideas around how to implement them.
Shared, mutable state
If a node mutates its inputs it may affect other nodes that also received the same input. Sometimes this behavior is intentional (optimization, laziness) and sometimes it is accidental (bug). It is hard in python to enforce immutability, so it may be hard for the framework to help prevent accidental mutation. In the case of intentional mutation the framework could help by establishing patterns and providing utilities. Ideas include:
- Declaring mutability as part of type, serving readers before any writer and refusing multiple writers.
- Providing read-write lock primitives for which the write lock cannot be released.
Latency
Latency is a problem for a graph in which the nodes interact directly, not via the engine. If the latency for one node exceeds the update interval then the graph cannot keep up. When the engine mediates it can start the next update before the previous has completed while preserving causality. It could even buffer the data if the latency is much higher than the interval. However, concurrency increases the risk of bugs if functions have shared, mutable state.
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
File details
Details for the file rappf-0.2.tar.gz
.
File metadata
- Download URL: rappf-0.2.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0527a8b2429859f54759c99fc11123c176e4ffc9a2570783f49c273b34bfa1e2 |
|
MD5 | b13792d56be0721875feb922107e946a |
|
BLAKE2b-256 | 73194b0228827d71090d1e0e110390f663b99178f9aa2db23e2dbea276827596 |
File details
Details for the file rappf-0.2-py3-none-any.whl
.
File metadata
- Download URL: rappf-0.2-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f661fce903ffa812ef6cadcc0dd5fe7242aeda67d8adfaa1d6785b45688bab4a |
|
MD5 | 5b50d00193908953a2acfbccd193b5e5 |
|
BLAKE2b-256 | 82b4b0d05d2934ca32c261e57ee89025e0ecb24fcddfbfd6ae99cbc012927979 |