python-performance-optimization
wshobson/agents
Profile and optimize Python code using cProfile, memory profilers, and performance best practices.
What is python-performance-optimization?
Comprehensive guide to profiling, analyzing, and optimizing Python code for better performance. Use this skill when debugging slow Python code, identifying bottlenecks, reducing memory consumption, or improving application latency and throughput.
- Profile CPU usage to identify time-consuming functions
- Track memory allocation and detect memory leaks
- Perform line-by-line code profiling for granular analysis
- Visualize function call relationships with call graphs
- Measure execution time and I/O wait patterns
- Implement caching and algorithmic optimizations
How to install python-performance-optimization
npx skills add https://github.com/wshobson/agents --skill python-performance-optimizationHow to use python-performance-optimization
- 1.Import profiling tools (cProfile, timeit, memory_profiler) into your code
- 2.Measure baseline performance using timeit or time.time()
- 3.Run CPU profiling with cProfile to identify hot paths
- 4.Use memory profilers to track allocation and detect leaks
- 5.Analyze results to locate actual bottlenecks (not assumptions)
- 6.Apply optimization strategies: algorithmic improvements, caching, data structures, or parallelization
- 7.Re-profile after changes to verify improvements
- 8.For production, use py-spy for live system profiling without code changes
Use cases
- Identifying performance bottlenecks in slow Python applications
- Reducing API response times and application latency
- Optimizing CPU-intensive operations and data processing pipelines
- Detecting and fixing memory leaks in long-running services
- Improving database query performance and I/O operations
- Backend engineers optimizing application performance
- Data scientists improving pipeline efficiency
- DevOps engineers profiling production systems
- Full-stack developers debugging slow features
- Performance engineers analyzing bottlenecks
python-performance-optimization FAQ
No. Always profile first to identify real bottlenecks. Optimizing without data wastes effort and may worsen clarity. Measure, find hot paths, then optimize.
CPU profiling measures execution time and identifies slow functions. Memory profiling tracks memory allocation, peak usage, and detects leaks. Use both for comprehensive analysis.
Use py-spy, which profiles running Python processes with minimal overhead and no code changes. For application-level profiling, use sampling-based approaches rather than deterministic profiling.
Use timeit module with the number parameter to run the code multiple times and average results. It disables garbage collection and provides accurate microsecond-level measurements.
Use caching (lru_cache) for expensive computations called repeatedly with same inputs. Use algorithmic optimization for inherently slow operations. Profile to determine which applies to your bottleneck.
Full instructions (SKILL.md)
Source of truth, from wshobson/agents.
name: python-performance-optimization description: Profile and optimize Python code using cProfile, memory profilers, and performance best practices. Use when debugging slow Python code, optimizing bottlenecks, or improving application performance.
Python Performance Optimization
Comprehensive guide to profiling, analyzing, and optimizing Python code for better performance, including CPU profiling, memory optimization, and implementation best practices.
When to Use This Skill
- Identifying performance bottlenecks in Python applications
- Reducing application latency and response times
- Optimizing CPU-intensive operations
- Reducing memory consumption and memory leaks
- Improving database query performance
- Optimizing I/O operations
- Speeding up data processing pipelines
- Implementing high-performance algorithms
- Profiling production applications
Core Concepts
1. Profiling Types
- CPU Profiling: Identify time-consuming functions
- Memory Profiling: Track memory allocation and leaks
- Line Profiling: Profile at line-by-line granularity
- Call Graph: Visualize function call relationships
2. Performance Metrics
- Execution Time: How long operations take
- Memory Usage: Peak and average memory consumption
- CPU Utilization: Processor usage patterns
- I/O Wait: Time spent on I/O operations
3. Optimization Strategies
- Algorithmic: Better algorithms and data structures
- Implementation: More efficient code patterns
- Parallelization: Multi-threading/processing
- Caching: Avoid redundant computation
- Native Extensions: C/Rust for critical paths
Quick Start
Basic Timing
import time
def measure_time():
"""Simple timing measurement."""
start = time.time()
# Your code here
result = sum(range(1000000))
elapsed = time.time() - start
print(f"Execution time: {elapsed:.4f} seconds")
return result
# Better: use timeit for accurate measurements
import timeit
execution_time = timeit.timeit(
"sum(range(1000000))",
number=100
)
print(f"Average time: {execution_time/100:.6f} seconds")
Detailed patterns and worked examples
Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.
Best Practices
- Profile before optimizing - Measure to find real bottlenecks
- Focus on hot paths - Optimize code that runs most frequently
- Use appropriate data structures - Dict for lookups, set for membership
- Avoid premature optimization - Clarity first, then optimize
- Use built-in functions - They're implemented in C
- Cache expensive computations - Use lru_cache
- Batch I/O operations - Reduce system calls
- Use generators for large datasets
- Consider NumPy for numerical operations
- Profile production code - Use py-spy for live systems
Common Pitfalls
- Optimizing without profiling
- Using global variables unnecessarily
- Not using appropriate data structures
- Creating unnecessary copies of data
- Not using connection pooling for databases
- Ignoring algorithmic complexity
- Over-optimizing rare code paths
- Not considering memory usage
Related skills
More from wshobson/agents and the wider catalog.
tailwind-design-system
Build production-ready design systems with Tailwind CSS v4, design tokens, and component libraries.
typescript-advanced-types
Master TypeScript's advanced type system: generics, conditional types, mapped types, and utility types for type-safe applications.
nodejs-backend-patterns
Build production-ready Node.js backends with Express/Fastify, middleware patterns, auth, and database integration.
brand-landingpage
Brand-first landing page designer with guided interviews and Stitch-powered iteration.
python-testing-patterns
Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development.
api-design-principles
Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs.