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()
|