File: bench_local.py

package info (click to toggle)
python-gevent 20.9.0-2
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 21,000 kB
  • sloc: python: 158,152; ansic: 72,855; sh: 5,235; makefile: 1,574; javascript: 108; awk: 18
file content (88 lines) | stat: -rw-r--r-- 1,921 bytes parent folder | download | duplicates (4)
1
2
3
4
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
50
51
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
# -*- coding: utf-8 -*-
"""
Benchmarks for thread locals.

"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import perf

from gevent.local import local as glocal
from threading import local as nlocal

class GLocalSub(glocal):
    pass

class NativeSub(nlocal):
    pass


benchmarks = []


def _populate(l):
    for i in range(10):
        setattr(l, 'attr' + str(i), i)


def bench_getattr(loops, local):
    t0 = perf.perf_counter()

    for _ in range(loops):
        # pylint:disable=pointless-statement
        local.attr0
        local.attr1
        local.attr2
        local.attr3
        local.attr4
        local.attr5
        local.attr6
        local.attr7
        local.attr8
        local.attr9

    return perf.perf_counter() - t0

def bench_setattr(loops, local):
    t0 = perf.perf_counter()

    for _ in range(loops):
        local.attr0 = 0
        local.attr1 = 1
        local.attr2 = 2
        local.attr3 = 3
        local.attr4 = 4
        local.attr5 = 5
        local.attr6 = 6
        local.attr7 = 7
        local.attr8 = 8
        local.attr9 = 9

    return perf.perf_counter() - t0

def main():
    runner = perf.Runner()

    for name, obj in (('gevent', glocal()),
                      ('gevent sub', GLocalSub()),
                      ('native', nlocal()),
                      ('native sub', NativeSub())):
        _populate(obj)

        benchmarks.append(
            runner.bench_time_func('getattr ' + name,
                                   bench_getattr,
                                   obj,
                                   inner_loops=10))

        benchmarks.append(
            runner.bench_time_func('setattr ' + name,
                                   bench_setattr,
                                   obj,
                                   inner_loops=10))


if __name__ == '__main__':
    main()