File: profile_reader.py

package info (click to toggle)
pytds 1.16.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 868 kB
  • sloc: python: 12,831; makefile: 199; sh: 8
file content (57 lines) | stat: -rw-r--r-- 1,348 bytes parent folder | download
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
import struct
import cProfile
import pstats
import pytds.tds_socket


BUFSIZE = 4096
HEADER = struct.Struct(">BBHHBx")


class Sock:
    def __init__(self):
        self._read_pos = 0
        self._buf = bytearray(b"\x00" * BUFSIZE)
        HEADER.pack_into(self._buf, 0, 0, 0, BUFSIZE, 0, 0)

    def sendall(self, data, flags=0):
        pass

    def recv_into(self, buffer, size=0):
        if size == 0:
            size = len(buffer)
        if self._read_pos >= BUFSIZE:
            HEADER.pack_into(self._buf, 0, 0, 0, BUFSIZE, 0, 0)
            self._read_pos = 0
        to_read = min(size, BUFSIZE - self._read_pos)
        buffer[:to_read] = self._buf[self._read_pos : self._read_pos + to_read]
        return to_read

    def recv(self, size):
        if self._read_pos >= len(self._buf):
            HEADER.pack_into(self._buf, 0, 0, 0, BUFSIZE, 0, 0)
            self._read_pos = 0
        res = self._buf[self._read_pos : self._read_pos + size]
        self._read_pos += len(res)
        return res

    def close(self):
        pass


class Session:
    def __init__(self):
        self._transport = Sock()


sess = Session()

rdr = pytds.tds._TdsReader(sess)
pr = cProfile.Profile()
pr.enable()
for _ in range(50000):
    rdr.recv(BUFSIZE)
pr.disable()
sortby = "tottime"
ps = pstats.Stats(pr).sort_stats(sortby)
ps.print_stats()