Files
python-sdk/docs/lib/async.md
T
zeekay 08b0828cc3 docs(lib): add core library documentation
- lib/index.md: Overview of all core utility packages
- lib/async.md: High-performance async I/O with uvloop
- lib/consensus.md: Metastable consensus protocol for multi-agent agreement
- lib/network.md: Agent network orchestration
- lib/aci.md: Agent-Computer Interface for development agents
- lib/repl.md: Interactive REPL with voice and LLM integration
2026-01-05 17:39:35 -08:00

210 lines
4.8 KiB
Markdown

# hanzo-async
High-performance async I/O for Hanzo AI with automatic uvloop configuration.
## Installation
```bash
pip install hanzo-async
```
## Features
- **Automatic uvloop** - 2-4x faster async on macOS/Linux
- **Async file I/O** - Non-blocking file operations
- **Async subprocess** - Non-blocking command execution
- **Consistent API** - Used across all Hanzo packages
## Quick Start
```python
from hanzo_async import (
read_file, write_file,
path_exists, mkdir,
run_command,
using_uvloop,
)
# Check if using high-performance backend
if using_uvloop():
print("Using uvloop for 2-4x faster async")
# Async file operations
content = await read_file("/path/to/file.txt")
await write_file("/path/to/output.txt", "content")
# Async path operations
if await path_exists("/path/to/dir"):
...
# Async subprocess
stdout, stderr, code = await run_command("ls", "-la")
```
## Loop Configuration
```python
from hanzo_async import configure_loop, using_uvloop, get_loop
# Configure on import (automatic)
configure_loop()
# Check backend
if using_uvloop():
print("uvloop active")
else:
print("Using asyncio (Windows or uvloop not installed)")
# Get current loop
loop = get_loop()
```
## File Operations
### Reading Files
```python
from hanzo_async import read_file, read_json, read_lines
# Read text file
content = await read_file("/path/to/file.txt")
# Read JSON file
data = await read_json("/path/to/config.json")
# Read lines
lines = await read_lines("/path/to/file.txt")
```
### Writing Files
```python
from hanzo_async import write_file, write_json, write_lines, append_file
# Write text file
await write_file("/path/to/file.txt", "content")
# Write JSON file
await write_json("/path/to/config.json", {"key": "value"})
# Write lines
await write_lines("/path/to/file.txt", ["line1", "line2"])
# Append to file
await append_file("/path/to/log.txt", "new entry\n")
```
## Path Operations
```python
from hanzo_async import (
path_exists, is_file, is_dir,
mkdir, rmdir, unlink,
stat, listdir, glob,
)
# Check existence
if await path_exists("/path"):
...
# Check type
if await is_file("/path/file.txt"):
...
if await is_dir("/path/dir"):
...
# Create directory
await mkdir("/path/new/dir", parents=True, exist_ok=True)
# Remove
await unlink("/path/file.txt") # Remove file
await rmdir("/path/dir") # Remove directory
# List directory
files = await listdir("/path/dir")
# Glob pattern
matches = await glob("/path/**/*.py")
# Get file info
info = await stat("/path/file.txt")
print(f"Size: {info.st_size}, Modified: {info.st_mtime}")
```
## Process Operations
```python
from hanzo_async import run_command, run_shell, check_command
# Run command with arguments
stdout, stderr, code = await run_command("git", "status")
# Run shell command
stdout, stderr, code = await run_shell("ls -la | grep .py")
# Check if command succeeds (raises on failure)
await check_command("make", "build")
```
## API Reference
### Loop Functions
| Function | Description |
|----------|-------------|
| `configure_loop()` | Configure uvloop (automatic on import) |
| `using_uvloop()` | Check if uvloop is active |
| `get_loop()` | Get current event loop |
### File Functions
| Function | Description |
|----------|-------------|
| `read_file(path)` | Read file as string |
| `read_json(path)` | Read and parse JSON file |
| `read_lines(path)` | Read file as list of lines |
| `write_file(path, content)` | Write string to file |
| `write_json(path, data)` | Write data as JSON |
| `write_lines(path, lines)` | Write list of lines |
| `append_file(path, content)` | Append to file |
### Path Functions
| Function | Description |
|----------|-------------|
| `path_exists(path)` | Check if path exists |
| `is_file(path)` | Check if path is a file |
| `is_dir(path)` | Check if path is a directory |
| `mkdir(path, ...)` | Create directory |
| `rmdir(path)` | Remove directory |
| `unlink(path)` | Remove file |
| `stat(path)` | Get file information |
| `listdir(path)` | List directory contents |
| `glob(pattern)` | Find files matching pattern |
### Process Functions
| Function | Description |
|----------|-------------|
| `run_command(*args)` | Run command with arguments |
| `run_shell(cmd)` | Run shell command |
| `check_command(*args)` | Run and raise on failure |
## Platform Support
| Platform | Backend | Performance |
|----------|---------|-------------|
| macOS | uvloop | 2-4x faster |
| Linux | uvloop | 2-4x faster |
| Windows | asyncio | Standard |
## Why uvloop?
uvloop is a fast, drop-in replacement for asyncio's event loop that uses libuv under the hood. It provides:
- **2-4x faster** async operations
- **Lower latency** for I/O bound tasks
- **Better scalability** under high concurrency
The hanzo-async package automatically configures uvloop when available, falling back to asyncio on Windows or when uvloop isn't installed.