Skip to content

debug

debug

profile

profile_async(func)

A profiler which can be used as a decorator on ASYNC methods to produce profiles and call graphs.

The Callgraph might be inspected with QCacheGrind or KCacheGrind or sth. else.

Parameters:

  • func

    the wrapped method

Returns:

  • The wrapper

Source code in src/qgis_server_light/debug/profile.py
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def profile_async(func):
    """A profiler which can be used as a decorator on ASYNC methods to produce
    profiles and call graphs.

    The Callgraph might be inspected with QCacheGrind or KCacheGrind or sth. else.

    Args:
        func: the wrapped method

    Returns:
        The wrapper
    """

    async def wrapper(*args, **kwargs):
        import cProfile
        import pstats

        import pyprof2calltree

        pr = cProfile.Profile()
        pr.enable()

        result = await func(*args, **kwargs)

        pr.disable()
        stats = pstats.Stats(pr)
        path = Path(".profile")
        path.mkdir(parents=True, exist_ok=True)
        stats_file = os.path.join(
            str(path), f"{func.__module__}.{func.__name__}.profile_data.prof"
        )
        callgrind_file = os.path.join(
            str(path), f"{func.__module__}.{func.__name__}.callgrind.out"
        )
        stats.dump_stats(stats_file)
        call_tree = pyprof2calltree.CalltreeConverter(stats)
        with open(callgrind_file, "w+") as f:
            call_tree.output(f)
        print(
            f"Profiling data saved to: {stats_file}, CallTree saved t: {callgrind_file}"
        )

        return result

    return wrapper

profile_sync(func)

A profiler which can be used as a decorator on SYNC methods to produce profiles and call graphs.

The Callgraph might be inspected with QCacheGrind or KCacheGrind or sth. else.

Parameters:

  • func

    the wrapped method

Returns:

  • The wrapper

Source code in src/qgis_server_light/debug/profile.py
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
def profile_sync(func):
    """A profiler which can be used as a decorator on SYNC methods to produce
    profiles and call graphs.

    The Callgraph might be inspected with QCacheGrind or KCacheGrind or sth. else.

    Args:
        func: the wrapped method

    Returns:
        The wrapper
    """

    def wrapper(*args, **kwargs):
        import cProfile
        import pstats

        import pyprof2calltree

        pr = cProfile.Profile()
        pr.enable()

        result = func(*args, **kwargs)

        pr.disable()
        stats = pstats.Stats(pr)
        path = Path(".profile")
        path.mkdir(parents=True, exist_ok=True)
        stats_file = os.path.join(
            str(path), f"{func.__module__}.{func.__name__}.profile_data.prof"
        )
        callgrind_file = os.path.join(
            str(path), f"{func.__module__}.{func.__name__}.callgrind.out"
        )
        stats.dump_stats(stats_file)
        call_tree = pyprof2calltree.CalltreeConverter(stats)
        with open(callgrind_file, "w+") as f:
            call_tree.output(f)
        print(
            f"Profiling data saved to: {stats_file}, CallTree saved t: {callgrind_file}"
        )

        return result

    return wrapper