RADICAL AsyncFlow (RAF) is a fast asynchronous scripting library built on top of asyncio for building powerful async/sync workflows on HPC, clusters, and local machines. It supports pluggable execution backends with intuitive task dependencies and workflow composition.
-
⚡ Powerful asynchronous workflows — Compose complex async and sync workflows easily, with intuitive task dependencies and campaign orchestration.
-
🌐 Portable across environments — Run seamlessly on HPC systems, clusters, and local machines with pluggable execution backends.
-
🧩 Flexible and extensible — Supports campaign management and advanced workflow patterns, built on Python’s asyncio and RADICAL Cybertools expertise.
AsyncFlow ships with the following built-in execution backends:
LocalExecutionBackend— local execution using Python's concurrent.futures (ThreadPoolExecutor / ProcessPoolExecutor)NoopExecutionBackend— no-op backend for testing anddry_runmode
For HPC execution, install RHAPSODY which provides additional backends that plug directly into AsyncFlow:
- Radical.Pilot — distributed HPC execution across supercomputers and clusters
- Dask — parallel computing with Dask distributed
- Concurrent — thread/process pool execution with extended HPC support
- Dragon — high-performance distributed execution
⚙️ Installation
Radical AsyncFlow package is available on PyPI.
pip install radical-asyncflow
For HPC execution via RHAPSODY:
pip install rhapsody-py
For developers:
git clone https://github.com/radical-cybertools/radical.asyncflow
cd radical.asyncflow
pip install -e .[dev,lint,doc]
📚 Documentation
👉 AsyncFlow Documentation and API References
Basic Usage
import asyncio
from radical.asyncflow import WorkflowEngine, LocalExecutionBackend
from concurrent.futures import ThreadPoolExecutor
async def main():
# Create backend and workflow
backend = await LocalExecutionBackend(ThreadPoolExecutor())
flow = await WorkflowEngine.create(backend=backend)
@flow.executable_task
async def task1():
return "/bin/echo 5"
@flow.function_task
async def task2(t1_result):
return int(t1_result.strip()) * 2 * 2
# create the workflow
t1_fut = task1()
t2_result = await task2(t1_fut) # t2 depends on t1 (waits for it)
print(t2_result)
# shutdown the execution backend
await flow.shutdown()
if __name__ == "__main__":
asyncio.run(main())
What AsyncFlow Can Be Used For
- AI & LLM Workflows - Build complex AI agent systems and orchestrate multiple language model calls with automatic dependency resolution in parallel.
- Data Processing Pipelines - Create data science pipelines, and real-time analytics with async task coordination.
- High-Performance Computing - Execute scientific computing workflows and distributed simulations on HPC clusters with scaling.
- Cross-Platform Execution - Deploy the same workflows locally for development, or HPC infrastructure without code changes
Metadata
Release files for radical.asyncflow 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| radical_asyncflow-0.5.1.tar.gz | 36.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| radical_asyncflow-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.1 kB
Release files / radical_asyncflow-0.5.1.tar.gz
| Download URL | radical_asyncflow-0.5.1.tar.gz |
|---|---|
| Size | 36.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ccf07e3d931285176587ccd006b350921a90477ec98ac4e9470eff257cf3f251
|
|
BLAKE2b-256 checksum How to use checksums |
5975694136b6d8a94876c1e1f13e4c0f916ffa58232e9512eac9512313ff0cc6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / radical_asyncflow-0.5.1-py3-none-any.whl
| Download URL | radical_asyncflow-0.5.1-py3-none-any.whl |
|---|---|
| Size | 34.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
21a59f6f8e19e4ec80332f5ea9788f04b54ddf2e17cb43b2a4151cc254916d0d
|
|
BLAKE2b-256 checksum How to use checksums |
1ef64ffee1e5029ec19ef3aed378d7f6c2fa7ff6233173103be35b750e945307
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|