Skip to main content

A lightweight, thread-safe Python library and 1-stop shop for profiling execution time, memory usage, CPU time, and function call counts.

Project description

SmartProfiler

SmartProfiler is a lightweight and easy-to-use Python library designed to help you effortlessly profile execution time, memory usage, CPU time, and function call counts in your Python code. Whether you're optimizing performance, debugging memory usage, tracking CPU utilization, or monitoring function calls, SmartProfiler provides a simple and efficient solution for all your profiling needs—especially in multithreaded environments.

Why SmartProfiler?

  • Unified Profiling: Unlike other libraries that focus on either time, memory, or CPU, SmartProfiler combines all four types of profiling into a single, intuitive tool. You can easily profile time, memory, CPU, and function calls with minimal setup.
  • Thread-Safe: Designed with multithreaded applications in mind, SmartProfiler ensures that profiling works seamlessly across different threads without race conditions or conflicts.
  • Minimal Overhead: The library introduces minimal performance overhead, providing accurate profiling data without slowing down your application.
  • Easy to Use: Profiling functions, code blocks, and even specific lines of code is straightforward. You can use decorators or context managers with just a few lines of code.

Features

  • Function-Level Profiling: Profile execution time, memory usage, CPU time, and function call counts using decorators.
  • Code Block and Line Profiling: Profile specific blocks or lines of code using context managers.
  • Multithreaded Profiling: Profile functions, blocks, and lines in multithreaded environments with thread safety.
  • Flexible Logging: Integration with Python's logging framework for detailed insights into your code's performance.
  • Function Call Tracking: Track the number of times a function is called, thread-safe and efficient.

Installation

You can easily install SmartProfiler via pip:

pip install smartprofiler

Usage Examples

Time Profiling for Functions

from smartprofiler import profile_time

@profile_time
def my_function():
    time.sleep(1)  # Simulate a time-consuming task

Memory Profiling for Functions

from smartprofiler import profile_memory

@profile_memory
def memory_intensive_function():
    data = [1] * (10**7)  # Simulate memory usage

CPU Time Profiling for Functions

from smartprofiler import profile_cpu_time

@profile_cpu_time
def cpu_intensive_function():
    # Simulate CPU-intensive task
    for _ in range(10**6):
        pass

Function Call Counting

from smartprofiler import profile_call_count

@profile_call_count
def my_function():
    print("Function called")

my_function()  # Logs: Function 'my_function' has been called 1 times
my_function()  # Logs: Function 'my_function' has been called 2 times

Block Profiling (Time, Memory & CPU-Usage)

from smartprofiler import profile_block

# Time Profiling Block
with profile_block('time'):
    time.sleep(1)

# Memory Profiling Block
with profile_block('memory'):
    data = [1] * (10**6)

# CPU Time Profiling Block
with profile_block('cpu_time'):
    # Simulate a CPU-intensive task
    for _ in range(10**6):
        pass

Line Profiling (Time, Memory & CPU-Usage)

from smartprofiler import profile_line

# Time Profiling Line
with profile_line('time'):
    result = sum([i for i in range(1000)])

# Memory Profiling Line
with profile_line('memory'):
    data = [1] * (10**6)

# CPU Time Profiling Line
with profile_line('cpu_time'):
    # Simulate CPU-intensive line
    for _ in range(10**6):
        pass

Multithreaded Profiling

import threading
from smartprofiler import profile_time

def thread_function():
    with profile_time:
        time.sleep(1)

threads = [threading.Thread(target=thread_function) for _ in range(5)]
for t in threads:
    t.start()
for t in threads:
    t.join()

Contributing to SmartProfiler

Contributions to SmartProfiler are welcome! Whether you're fixing a bug, adding a feature, or improving documentation, your help is appreciated.

How to Contribute

  1. Fork the Repository:
    Start by forking the SmartProfiler repository.

  2. Make Your Changes:
    Make the necessary changes, whether it's fixing a bug, adding a new feature, or improving documentation.

  3. Submit a Pull Request:
    Once your changes are ready, submit a pull request with a clear description of what you've done. Be sure to include relevant details, such as any bugs fixed or features added.

Code of Conduct

By contributing, you agree to follow the Code of Conduct, ensuring a positive environment for all.


GitHub Repository: SmartProfiler on GitHub

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SmartProfiler-0.2.0.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

SmartProfiler-0.2.0-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file SmartProfiler-0.2.0.tar.gz.

File metadata

  • Download URL: SmartProfiler-0.2.0.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.11

File hashes

Hashes for SmartProfiler-0.2.0.tar.gz
Algorithm Hash digest
SHA256 693bfcfa7354f9d4a3862c80bf8b509bece9a4876405304cf800e8d23aa42907
MD5 41ea20358723e19e24b7fdb91231a063
BLAKE2b-256 51d0b8f9392b842cf5e47799335fb20524f212047cc659bdc736b58ca1148361

See more details on using hashes here.

File details

Details for the file SmartProfiler-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: SmartProfiler-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.11

File hashes

Hashes for SmartProfiler-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bdb326d63978ea5841dddc3f665aad114c84f2e170ba701aae975145120cea39
MD5 ce76944b4a7405e5811b81c3d0736d00
BLAKE2b-256 c81e467bcfd631ea2f94ce73bec86282694bd3fea6568e3e5cdd3a50f22e3fb8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page