Jim Paris
11d9f9d6e5
git-svn-id: https://bucket.mit.edu/svn/nilm/nilmdb@9734 ddd99763-3ecb-0310-9145-efcb8ce7c51f
77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
#!/usr/bin/python
|
|
|
|
from printf import printf
|
|
import time
|
|
import re
|
|
import numpy as np
|
|
import itertools
|
|
import struct
|
|
import array
|
|
|
|
class Timer():
|
|
def __init__(self, arg):
|
|
self.arg = arg
|
|
def __enter__(self): self.start = time.time()
|
|
def __exit__(self, *args): printf("%s: %f klines/sec\n", self.arg, 1e3 / (time.time() - self.start))
|
|
|
|
def read_ascii():
|
|
for n in xrange(1000000):
|
|
yield (1234, 2345, 3456, 4576, 5678, 6789)
|
|
# for n, line in enumerate(open('1m.raw', 'r')):
|
|
# out = [0]*6
|
|
# tmp = [ int(i,10) for i in line.partition('#')[0].split() ]
|
|
# out[0:len(tmp)] = tmp
|
|
# if (n % 100000 == 0):
|
|
# printf("line %d = %s\n", n, str(out))
|
|
# yield out
|
|
|
|
def test_struct1():
|
|
"""write with struct.pack"""
|
|
f = open('1m.bin', 'wb')
|
|
for out in read_ascii():
|
|
s = struct.pack('!HHHHHH', *out)
|
|
f.write(s)
|
|
|
|
def test_struct2():
|
|
"""use constant format string"""
|
|
f = open('1m.bin', 'wb')
|
|
packer = struct.Struct('!HHHHHH')
|
|
for out in read_ascii():
|
|
f.write(packer.pack(*out))
|
|
f.close()
|
|
printf("size was %d\n", packer.size)
|
|
|
|
def test_struct3():
|
|
"""like struct1, with timestamp"""
|
|
f = open('1m.bin', 'wb')
|
|
for out in read_ascii():
|
|
s = struct.pack('!dHHHHHH', time.time(), *out)
|
|
f.write(s)
|
|
|
|
def test_struct4():
|
|
"""like struct2, with timestamp"""
|
|
f = open('1m.bin', 'wb')
|
|
packer = struct.Struct('!dHHHHHH')
|
|
for out in read_ascii():
|
|
f.write(packer.pack(time.time(), *out))
|
|
f.close()
|
|
printf("size was %d\n", packer.size)
|
|
|
|
#raise Exception('done')
|
|
|
|
with Timer("struct1"):
|
|
test_struct1() # 1089k
|
|
|
|
with Timer("struct2"):
|
|
test_struct2() # 1249k
|
|
|
|
with Timer("struct3"):
|
|
test_struct3() # 845k
|
|
|
|
with Timer("struct4"):
|
|
test_struct4() # 922k
|
|
|
|
# This seems fast enough for writing new data, since it's faster than
|
|
# we read ascii data anyway. Use e.g. struct4
|
|
|