python-performance-optimization
wshobson/agents
Profile and optimize Python code to identify bottlenecks and improve performance.
What is python-performance-optimization?
This skill provides tools and techniques for profiling Python applications using cProfile, memory profilers, and line-level analysis to identify performance bottlenecks. Use it when debugging slow code, optimizing CPU-intensive operations, reducing memory consumption, or improving application latency.
- 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 graphs and relationships
- Measure execution time and I/O wait patterns
- Apply optimization strategies including algorithmic improvements, caching, and parallelization
How to install python-performance-optimization
npx skills add https://github.com/wshobson/agents --skill python-performance-optimizationHow to use python-performance-optimization
- 1.Use timeit or time.time() to measure basic execution time
- 2.Run cProfile on your code to identify CPU bottlenecks and hot paths
- 3.Use memory profilers to track allocation and detect leaks
- 4.Profile at line-level granularity for detailed analysis
- 5.Analyze call graphs to understand function relationships
- 6.Apply optimization strategies: improve algorithms, use appropriate data structures, add caching, or consider parallelization
- 7.Re-profile after changes to verify improvements
Use cases
- Debugging slow response times in web applications or APIs
- Optimizing data processing pipelines and batch jobs
- Reducing memory consumption in long-running services
- Identifying bottlenecks in database query performance
- Profiling production applications to find real-world performance issues
- Backend engineers optimizing application performance
- Data engineers improving pipeline efficiency
- DevOps engineers profiling production systems
- Python developers debugging performance issues
- Performance engineers conducting optimization work
python-performance-optimization FAQ
CPU profiling identifies which functions consume the most execution time, while memory profiling tracks memory allocation patterns and detects leaks. Use CPU profiling for latency issues and memory profiling for memory consumption problems.
No. Always profile first to identify real bottlenecks. Optimizing without profiling wastes effort on code that isn't actually slow and may introduce bugs.
Focus on algorithmic improvements first, then use appropriate data structures (dict for lookups, set for membership), add caching with lru_cache, use built-in functions, and consider NumPy for numerical operations.
Use py-spy, which can profile live systems with minimal overhead, or use sampling-based profilers that collect data at intervals rather than on every call.
Use generators for large datasets to reduce memory consumption, especially when processing data sequentially. Generators compute values on-demand rather than storing everything in memory.
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.

python-project-structure
Design well-organized Python projects with clear module boundaries, explicit public interfaces, and maintainable directory structures.

python-resilience
Automatic retries, exponential backoff, and fault-tolerant decorators for resilient Python services.

python-resource-management
Manage Python resources deterministically with context managers, cleanup patterns, and streaming.

python-testing-patterns
Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development.

python-type-safety
Add robust Python type hints, generics, and protocols with strict mypy/pyright checking guidance.

quantized-export
Export promoted fine-tuned models in the right deployment format—FP8, AWQ, GGUF, or LoRA-only.