๐ MemoryGuard
Like Lego for your Code - Modular Python Memory Monitoring & Valgrind Integration
Drop-in memory monitoring for any Python project. Track memory usage, detect leaks, profile tools, and integrate with Valgrind - all with minimal overhead.
โจ Features
- ๐ฏ Zero Config - Works out of the box
- ๐ Real-time Monitoring - Live memory tracking
- ๐ Leak Detection - Automatic leak identification
- ๐ ๏ธ Tool Profiling - Per-function memory analysis
- ๐บ Live Dashboard - Beautiful terminal UI (optional)
- ๐ง Valgrind Integration - Deep C-extension analysis
- ๐ CI/CD Ready - GitHub Actions integration
- ๐งฉ Modular - Use only what you need
๐ Quick Start
pip install memoryguard
Basic Usage
from memoryguard import MemoryGuard, track_memory
# Initialize
guard = MemoryGuard(threshold_mb=500)
# Track any function
@track_memory("heavy_computation", guard)
def heavy_computation():
return sum(i**2 for i in range(1000000))
result = heavy_computation()
# Check memory manually
alert = guard.check_memory("after_computation")
if alert:
print(f"โ ๏ธ {alert.message}")
Context Manager
from memoryguard import memory_context
with memory_context("database_query", guard):
# Your code here
large_dataset = fetch_data()
process(large_dataset)
# Memory automatically tracked
Live Dashboard
from memoryguard import MemoryDashboard
dashboard = MemoryDashboard(guard)
with dashboard.live_display():
# Your long-running operation
run_big_analysis()
๐งฉ Integration Patterns
Pattern 1: Decorator (Simplest)
from memoryguard import track_memory, get_memory_guard
guard = get_memory_guard(threshold_mb=1000)
@track_memory("my_function", guard)
def my_function():
pass
Pattern 2: Class Inheritance (For Tools)
from memoryguard import MemoryInstrumentedTool
class MyScanner(MemoryInstrumentedTool):
tool_name = "myscanner"
def scan(self, target):
with self.memory_context(target):
return self.do_scan(target)
Pattern 3: Orchestrator (For Workflows)
from memoryguard import MemoryAwareOrchestrator
orchestrator = MemoryAwareOrchestrator(max_memory_mb=2000)
orchestrator.register_tool(my_tool)
result = await orchestrator.execute_with_memory_control(
"my_tool", target, my_tool.scan(target)
)
๐ Dashboard
If you have rich installed:
pip install memoryguard[dashboard]
Live Dashboard Preview
Live memory monitoring with top processes, RSS/VMS usage, and memory percentage
from memoryguard import MemoryDashboard
dashboard = MemoryDashboard(guard)
# Simple text output
print(dashboard.get_simple_display())
# [Memory: 456.3MB | Status: OK | Alerts: 0]
# Or live display
with dashboard.live_display():
run_analysis()
Shows:
- Live memory graph (sparkline)
- RSS/VMS usage
- Recent alerts
- Tool breakdown
- Progress bars
๐ง Valgrind Integration
For C-extension analysis:
from memoryguard import ValgrindWrapper
wrapper = ValgrindWrapper()
if wrapper.available:
result = wrapper.check_python_module(
"my_c_extension",
timeout=300
)
print(result['valgrind_log'])
๐ CI/CD Integration
GitHub Actions
name: Memory Check
on: [push, pull_request]
jobs:
memory-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install
run: pip install memoryguard
- name: Run with Memory Tracking
run: |
python -c "
from memoryguard import MemoryGuard
guard = MemoryGuard()
# ... your code ...
guard.generate_report('memory-report.json')
"
- name: Upload Report
uses: actions/upload-artifact@v3
with:
name: memory-report
path: memory-report.json
๐ Advanced Usage
Memory-Efficient Batch Processing
from memoryguard import memory_efficient_batch
async def process_targets(targets):
async def scan_batch(batch):
return [await scan(t) for t in batch]
return await memory_efficient_batch(
targets,
scan_batch,
batch_size=10
)
Leak Detection
# Reset baseline
guard.reset_baseline()
# Run your code
suspected_leaky_function()
# Check for leaks
leak_report = guard.detect_leaks("my_function")
if leak_report:
print(f"Leaked: {leak_report['total_leaked_mb']}MB")
Force Garbage Collection
stats = guard.force_gc()
print(f"Freed {stats['memory_freed_mb']:.1f}MB")
print(f"Collected {stats['objects_collected']} objects")
โ๏ธ Configuration
guard = MemoryGuard(
threshold_mb=500, # Warning threshold
critical_threshold_mb=1000, # Critical threshold
check_interval=30, # Background check interval (seconds)
enable_snapshots=True, # Store history
log_dir="~/.memoryguard/logs" # Report location
)
๐งช Testing
# Install dev dependencies
pip install memoryguard[dev]
# Run tests
pytest tests/ -v
# With coverage
pytest tests/ --cov=memoryguard
# Benchmarks
pytest tests/ --benchmark-only
๐ Project Structure
memoryguard/
โโโ memoryguard/
โ โโโ __init__.py # Main exports
โ โโโ core.py # MemoryGuard, Valgrind
โ โโโ integration.py # Tool integration
โ โโโ dashboard.py # TUI (requires rich)
โโโ tests/
โ โโโ test_memoryguard.py
โโโ examples/
โ โโโ demo.py
โโโ pyproject.toml
โโโ README.md
๐ค Usage in Other Projects
As Git Submodule
git submodule add https://github.com/SHAdd0WTAka/memoryguard.git third_party/memoryguard
As Local Package
# Clone anywhere
git clone https://github.com/SHAdd0WTAka/memoryguard.git
# Install in editable mode
pip install -e ./memoryguard
Copy-Paste (Single File)
Just copy memoryguard/core.py to your project - it's self-contained!
๐ Requirements
- Python 3.8+
- psutil
- Optional: rich (for dashboard)
- Optional: valgrind (for C analysis)
๐ License
MIT License - see LICENSE file
๐ Credits
Created for CLAWDBOT / Zen-AI-Pentest - now available for everyone!
Like Lego for your Code ๐ง๐งฑ - Just drop it in and go!
Metadata
Release files for memoryguard 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| memoryguard-1.0.2.tar.gz | 122.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| memoryguard-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 140.6 kB
Release files / memoryguard-1.0.2.tar.gz
| Download URL | memoryguard-1.0.2.tar.gz |
|---|---|
| Size | 122.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ebc41894ceb11677f0d0c5ac5c526c2bf5f2c9df284cbd50fbaa0a17f528b88
|
|
BLAKE2b-256 checksum How to use checksums |
ad13cd593e71ea73a7ae612dde3e11702c565a71ff4bd8e7c482ae570d83bd5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / memoryguard-1.0.2-py3-none-any.whl
| Download URL | memoryguard-1.0.2-py3-none-any.whl |
|---|---|
| Size | 18.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fb10d0a744ba9bce651ba6440c95317d48829dfbcb6e1304ad0e8e9bb87fca0
|
|
BLAKE2b-256 checksum How to use checksums |
3aaeb0f4ae9819f42fb7fcd2579a8ceacf40da5569bc2947c8654dcbad72d635
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|