PluginBench
Skill
Pass
Audit score 90

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-optimization
Claude Code
Cursor
Windsurf
Cline

How to use python-performance-optimization

  1. 1.Use timeit or time.time() to measure basic execution time
  2. 2.Run cProfile on your code to identify CPU bottlenecks and hot paths
  3. 3.Use memory profilers to track allocation and detect leaks
  4. 4.Profile at line-level granularity for detailed analysis
  5. 5.Analyze call graphs to understand function relationships
  6. 6.Apply optimization strategies: improve algorithms, use appropriate data structures, add caching, or consider parallelization
  7. 7.Re-profile after changes to verify improvements

Use cases

Good for
  • 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
Who it's for
  • 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

What's the difference between CPU profiling and memory profiling?

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.

Should I optimize before profiling?

No. Always profile first to identify real bottlenecks. Optimizing without profiling wastes effort on code that isn't actually slow and may introduce bugs.

What are the best optimization strategies?

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.

How do I profile production code without impacting performance?

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.

When should I use generators instead of lists?

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

  1. Profile before optimizing - Measure to find real bottlenecks
  2. Focus on hot paths - Optimize code that runs most frequently
  3. Use appropriate data structures - Dict for lookups, set for membership
  4. Avoid premature optimization - Clarity first, then optimize
  5. Use built-in functions - They're implemented in C
  6. Cache expensive computations - Use lru_cache
  7. Batch I/O operations - Reduce system calls
  8. Use generators for large datasets
  9. Consider NumPy for numerical operations
  10. 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