Fetcher.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import time as stime
  2. import redis
  3. import h5py
  4. from os import path
  5. from datetime import timedelta
  6. class Fetcher(object):
  7. latest_delta = 2
  8. def __init__(self, file_name):
  9. self._mquit = False
  10. self._mRHost = ''
  11. self._mRPort = 6379
  12. self._file_name = file_name
  13. def set_redis(self, rhost, rport):
  14. self._mRHost = rhost
  15. self._mRPort = rport
  16. def stop(self):
  17. self._mquit = True
  18. pass
  19. def redis_name_prefix(self) -> dict:
  20. pass
  21. def run(self):
  22. while self._mquit == False:
  23. fAllEmpty = True
  24. try:
  25. pool = redis.ConnectionPool(host=self._mRHost, port=self._mRPort, db=0)
  26. r = redis.Redis(connection_pool=pool)
  27. if path.exists(self._file_name):
  28. hfive = h5py.File(self._file_name, 'a')
  29. else:
  30. hfive = h5py.File(self._file_name, 'w')
  31. latest_time = int(stime.time()) - self.latest_delta
  32. name_prefix = self.redis_name_prefix()
  33. for name, prefix in name_prefix.items():
  34. fEmpty = self.fetch_hset(hfive, r, name, prefix, latest_time)
  35. if fEmpty == False:
  36. fAllEmpty = False
  37. hfive.close()
  38. except Exception as ex:
  39. print(ex)
  40. finally:
  41. if fAllEmpty:
  42. stime.sleep(1)
  43. def parase(self, hfive, key, val, prefix, latest_time):
  44. pass
  45. def fetch_hset(self, hfive, redis, name, prefix, latest_time):
  46. i = 0
  47. fEmpty = True
  48. for item in redis.hscan_iter(name):
  49. fEmpty = False
  50. key = str(item[0], encoding="utf-8")
  51. val = str(item[1], encoding="utf-8")
  52. print(f'{prefix}:{i}')
  53. i += 1
  54. fDel = self.parase(hfive, key, val, prefix, latest_time)
  55. if fDel:
  56. redis.hdel(name, key)
  57. return fEmpty
  58. def day_stamp(self, stamp):
  59. stamp = int(stamp)
  60. x = stime.gmtime(stamp + 8 * 3600)
  61. diff = timedelta(hours=x.tm_hour, minutes=x.tm_min, seconds=x.tm_sec)
  62. today = stamp - diff.total_seconds()
  63. return int(today)