1- # pyfuse
1+ # away
22
33** Run any Python function on a remote worker — zero setup, zero deployment.**
44
77[ ![ Typed] ( https://img.shields.io/badge/typing-strict%20mypy-blue )] ( https://mypy-lang.org/ )
88[ ![ Zero Dependencies] ( https://img.shields.io/badge/dependencies-0-brightgreen )] ( )
99
10- Add ` @trace ` to a function. pyfuse captures its source, dependencies, and imports automatically.
10+ Add ` @trace ` to a function. away captures its source, dependencies, and imports automatically.
1111Workers reconstruct and execute everything from scratch — no shared filesystem, no deployment pipeline.
1212Missing packages are installed on the fly.
1313
1414## Quick start
1515
1616``` bash
17- pip install pyfuse
17+ pip install away
1818```
1919
2020``` python
21- import asyncio, math, pyfuse
22- from pyfuse import trace
21+ import asyncio, math, away
22+ from away import trace
2323
24- pyfuse .connect(" local://localhost:9748" )
24+ away .connect(" local://localhost:9748" )
2525
2626def add (a , b ):
2727 return a + b
@@ -39,19 +39,19 @@ asyncio.run(main())
3939Only the entry point needs ` @trace ` — everything it calls is captured automatically.
4040
4141``` bash
42- pyfuse worker --backend local://localhost:9748 --tmp # start a worker
42+ away worker --backend local://localhost:9748 --tmp # start a worker
4343python my_script.py # → 5.0
4444```
4545
46- For multi-machine, swap ` local:// ` for ` redis:// ` . That's it.
46+ For multi-machine, swap ` local:// ` for ` redis:// ` or an ` https:// ` managed broker URL . That's it.
4747
4848## Sandbox
4949
5050Run tasks inside Docker containers for isolation — transparent to clients:
5151
5252``` bash
53- pyfuse sandbox setup # build image (once)
54- pyfuse worker --backend redis://localhost:6379 --sandbox # run with isolation
53+ away sandbox setup # build image (once)
54+ away worker --backend redis://localhost:6379 --sandbox # run with isolation
5555```
5656
5757See [ Sandbox] ( docs/SANDBOX.md ) for configuration and management.
@@ -62,13 +62,13 @@ Pre-shared token or PIN-based pairing + HMAC-SHA256 — workers reject untrusted
6262
6363``` bash
6464# Token-based (recommended for CI/CD)
65- pyfuse token generate # generate once
66- export PYFUSE_SIGNING_TOKEN =< token> # set on client & worker
67- pyfuse worker --backend redis://localhost:6379 --require-signing
65+ away token generate # generate once
66+ export AWAY_SIGNING_TOKEN =< token> # set on client & worker
67+ away worker --backend redis://localhost:6379 --require-signing
6868
6969# PIN-based pairing (interactive)
70- pyfuse worker --backend redis://localhost:6379 --pair # displays a 6-digit PIN
71- pyfuse pair --backend redis://localhost:6379 # on client: enter the PIN
70+ away worker --backend redis://localhost:6379 --pair # displays a 6-digit PIN
71+ away pair --backend redis://localhost:6379 # on client: enter the PIN
7272```
7373
7474After setup, tasks are signed automatically. No client-side code changes. See [ Signing & Pairing] ( docs/SIGNING.md ) for details.
@@ -83,10 +83,10 @@ After setup, tasks are signed automatically. No client-side code changes. See [S
8383| ** Retry & timeout** | ` @trace(timeout=30, retries=3) ` with exponential backoff |
8484| ** Scheduling** | ` .run_in(delay) ` , ` .run_at(datetime) ` , ` .run_every(freq) ` with cancellation |
8585| ** Throttling** | ` @trace(throttle=timedelta(hours=24)/50) ` — rate-limit executions |
86- | ** Progress & cancellation** | ` pyfuse .progress(3, 10)` inside tasks; ` await future.cancel() ` on client |
86+ | ** Progress & cancellation** | ` away .progress(3, 10)` inside tasks; ` await future.cancel() ` on client |
8787| ** Heartbeat & stall detection** | Workers heartbeat; clients raise ` TaskStalled ` on silence |
8888| ** Content-hash caching** | Same code = cache hit, regardless of client |
89- | ** Pluggable backends** | ` local:// ` (same-machine TCP), ` redis:// ` , ` amqp:// ` (RabbitMQ) |
89+ | ** Pluggable backends** | ` local:// ` (same-machine TCP), ` redis:// ` , ` amqp:// ` (RabbitMQ), ` http:// ` / ` https:// ` (hosted broker API) |
9090| ** Docker sandbox** | Container isolation, transparent to clients |
9191| ** Signed execution** | Pre-shared token or PIN pairing + HMAC-SHA256 task authentication |
9292| ** Graceful shutdown** | Ctrl+C drains in-flight tasks; second Ctrl+C force-quits |
@@ -99,12 +99,13 @@ After setup, tasks are signed automatically. No client-side code changes. See [S
9999| ** [ Technical Overview] ( docs/TECHNICAL_OVERVIEW.md ) ** | Architecture, serialization format, internals |
100100| ** [ Signing & Pairing] ( docs/SIGNING.md ) ** | Cryptographic task signing protocol |
101101| ** [ Sandbox] ( docs/SANDBOX.md ) ** | Docker container isolation |
102+ | ** [ Cloud POC] ( docs/CLOUD_POC.md ) ** | Local FastAPI + MongoDB + Kubernetes + React prototype for managed hosting |
102103
103104## Examples
104105
105106``` bash
106- pyfuse worker --backend local://localhost:9748 --tmp
107- pyfuse run examples/remote_execution.py
107+ away worker --backend local://localhost:9748 --tmp
108+ away run examples/remote_execution.py
108109```
109110
110111[ ` remote_execution.py ` ] ( examples/remote_execution.py ) · [ ` async_execution.py ` ] ( examples/async_execution.py ) · [ ` package_installation.py ` ] ( examples/package_installation.py ) · [ ` progress_reporting.py ` ] ( examples/progress_reporting.py ) · [ ` cancellation.py ` ] ( examples/cancellation.py ) · [ ` scheduling.py ` ] ( examples/scheduling.py ) · [ ` throttling_and_retry.py ` ] ( examples/throttling_and_retry.py ) · [ ` large_module.py ` ] ( examples/large_module.py )
0 commit comments