File: LRU-experiments.py

package info (click to toggle)
pytables 3.11.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,272 kB
  • sloc: ansic: 82,216; python: 65,569; cpp: 753; sh: 394; makefile: 106
file content (100 lines) | stat: -rw-r--r-- 2,792 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
89
90
91
92
93
94
95
96
97
98
99
100
# Testbed to perform experiments in order to determine best values for
# the node numbers in LRU cache. Tables version.

from time import perf_counter as clock

import tables as tb

print("PyTables version-->", tb.__version__)

filename = "/tmp/junk-tables-100.h5"
NLEAVES = 2000
NROWS = 1000


class Particle(tb.IsDescription):
    name = tb.StringCol(16, pos=1)  # 16-character String
    lati = tb.Int32Col(pos=2)  # integer
    longi = tb.Int32Col(pos=3)  # integer
    pressure = tb.Float32Col(pos=4)  # float  (single-precision)
    temperature = tb.Float64Col(pos=5)  # double (double-precision)


def create_junk():
    # Open a file in "w"rite mode
    fileh = tb.open_file(filename, mode="w")
    # Create a new group
    group = fileh.create_group(fileh.root, "newgroup")

    for i in range(NLEAVES):
        # Create a new table in newgroup group
        table = fileh.create_table(
            group, "table" + str(i), Particle, "A table", tb.Filters(1)
        )
        particle = table.row
        print("Creating table-->", table._v_name)

        # Fill the table with particles
        for i in range(NROWS):
            # This injects the row values.
            particle.append()
        table.flush()

    # Finally, close the file
    fileh.close()


def modify_junk_lru():
    fileh = tb.open_file(filename, "a")
    group = fileh.root.newgroup
    for j in range(5):
        print("iter -->", j)
        for tt in fileh.walk_nodes(group):
            if isinstance(tt, tb.Table):
                pass
    #                 for row in tt:
    #                     pass
    fileh.close()


def modify_junk_lru2():
    fileh = tb.open_file(filename, "a")
    group = fileh.root.newgroup
    for j in range(20):
        t1 = clock()
        for i in range(100):
            # print("table-->", tt._v_name)
            _ = getattr(group, "table" + str(i))
            # for row in _:
            #    pass
        print(f"iter and time --> {j + 1} {clock() - t1:.3f}")
    fileh.close()


def modify_junk_lru3():
    fileh = tb.open_file(filename, "a")
    group = fileh.root.newgroup
    for j in range(3):
        t1 = clock()
        for tt in fileh.walk_nodes(group, "Table"):
            tt.attrs.TITLE
            for row in tt:
                pass
        print(f"iter and time --> {j + 1} {clock() - t1:.3f}")
    fileh.close()


if 1:
    # create_junk()
    # modify_junk_LRU()    # uses the iterator version (walk_nodes)
    # modify_junk_LRU2()   # uses a regular loop (getattr)
    modify_junk_lru3()  # uses a regular loop (getattr)
else:
    import pstats
    import profile

    profile.run("modify_junk_LRU2()", "modify.prof")
    stats = pstats.Stats("modify.prof")
    stats.strip_dirs()
    stats.sort_stats("time", "calls")
    stats.print_stats()