mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
- 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
210 lines
4.8 KiB
Markdown
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.
|