test_modification.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import h5py
  2. import logging
  3. import argparse
  4. import time
  5. import contextlib
  6. @contextlib.contextmanager
  7. def elapsed():
  8. start = time.time()
  9. yield
  10. end = time.time()
  11. logging.info("{:.3f} seconds elapsed".format(end - start))
  12. def write(name, size):
  13. with elapsed():
  14. f = h5py.File(name, 'w')
  15. dset = f.create_dataset('dset', (size, ), dtype='u1')
  16. dset.attrs.create('name', 'some name')
  17. dset.attrs.create('number', 42)
  18. dset[:] = 123
  19. f.flush()
  20. f.close()
  21. logging.info("Wrote {} bytes to {}".format(size, name))
  22. def modify(name):
  23. with elapsed():
  24. f = h5py.File(name, 'r+')
  25. dset = f['dset']
  26. dset.attrs.modify('name', 'foo')
  27. dset.attrs.modify('number', 23)
  28. f.flush()
  29. f.close()
  30. logging.info("Modified {}".format(name))
  31. def main():
  32. logging.basicConfig(level=logging.DEBUG)
  33. parser = argparse.ArgumentParser()
  34. parser.add_argument('--write', action='store_true')
  35. parser.add_argument('--modify', action='store_true')
  36. args = parser.parse_args()
  37. files = [('test.1K.h5', 1024),
  38. ('test.1M.h5', 1024 * 1024),
  39. ('test.10M.h5', 10 * 1024 * 1024),
  40. ('test.100M.h5', 100 * 1024 * 1024),
  41. ('test.1G.h5', 1024 * 1024 * 1024)]
  42. if args.write:
  43. for name, size in files:
  44. write(name, size)
  45. if args.modify:
  46. for name, _ in files:
  47. modify(name)
  48. if __name__ == '__main__':
  49. main()