Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

tasks_loop.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. import asyncio
  2. import time
  3. import redis
  4. import os
  5. import copy
  6. import json
  7. import traceback
  8. import inspect
  9. '''
  10. umod
  11. # '''
  12. p=print
  13. async def anop(*a,**kw):pass
  14. def nop(*a,**kw):pass
  15. def connect_redis():
  16. return redis.Redis(host='localhost', port=6379, db=0,charset="utf-8", decode_responses=True, encoding_errors="backslashreplace")
  17. '''
  18. # '''
  19. def callable_helper(fn):
  20. ret = {
  21. "is_callable":0,
  22. "is_coroutine":0,
  23. }
  24. ret["is_callable"]= callable(fn)
  25. ret["is_coroutine"]= inspect.iscoroutinefunction(fn)
  26. # if (ca)
  27. return ret
  28. class AclTaskMixin:
  29. async def ws_conn0(self):
  30. glob_cl.run_persistent_loop(self)
  31. print("++++++++++++++++++++++++++")
  32. # oinfo(glob_cl)
  33. async def ws_conn_once(self,*a,**kw):
  34. print("\t\tws_conn_once:","AclTaskMixin")
  35. # GCLMixin
  36. class globCL():
  37. def __init__(self,*a,**kw):
  38. # for now we are not going to do any weird class stuff
  39. self.rconn = connect_redis()
  40. self.rman = RldMan()
  41. self.cbs_once = []
  42. self.cbs_once_set = set()
  43. self.cbs = {"fn1":fn1,"fn2x":nop}
  44. pass
  45. async def persistent_loop(self,*a,**kw):
  46. while 1:
  47. # p("PL:",time.time(),flush=1)
  48. # await asyncio.sleep(5)
  49. # for k,v in cls.cbs.items():
  50. for k,v in [*self.cbs.items()]:
  51. try:
  52. call_info = callable_helper(v)
  53. if (call_info["is_callable"]):
  54. if call_info["is_coroutine"]:
  55. pass
  56. await v({k,self})
  57. else:
  58. v({k,self})
  59. else:
  60. pass
  61. # p(k,v)
  62. pass
  63. except Exception as e:
  64. p("persistent_loop Exception",e)
  65. p(flush=True)
  66. # raise
  67. else:
  68. pass
  69. finally:
  70. pass
  71. # cbs_once
  72. cbs_once = [*self.cbs_once,*self.cbs_once_set]
  73. self.cbs_once = []
  74. self.cbs_once_set = set()
  75. k=0
  76. for v in cbs_once:
  77. try:
  78. call_info = callable_helper(v)
  79. if (call_info["is_callable"]):
  80. if call_info["is_coroutine"]:
  81. pass
  82. await v({k,self})
  83. else:
  84. v({k,self})
  85. else:
  86. pass
  87. # p(k,v)
  88. pass
  89. except Exception as e:
  90. p("persistent_loop Exception cbs_once:",e)
  91. p(flush=True)
  92. # raise
  93. else:
  94. pass
  95. finally:
  96. pass
  97. k += 1
  98. await asyncio.sleep(cls.timeout)
  99. def _run_persistent_loop(self,*a,**kw):
  100. p("_run_persistent_loop:")
  101. loop = asyncio.get_event_loop()
  102. self.run_persistent_loop = nop
  103. loop.create_task(self.persistent_loop())
  104. self.loop = loop
  105. run_persistent_loop = _run_persistent_loop
  106. pass
  107. # RldManMixin
  108. class RldMan():
  109. def __init__(self,*a,**kw):
  110. self.files = {}
  111. base_path = "/usr/games/repos/ign4/py_rld/djc/rdir1/"
  112. file_list = [
  113. base_path+"r0.py",
  114. base_path+"r1.py",
  115. base_path+"r2.py",
  116. base_path+"r3.py",
  117. base_path+"r4.py",
  118. base_path+"r5.py",
  119. ]
  120. self.add_files(file_list)
  121. def add_files(self,files):
  122. for file in files:
  123. if type(file)==str:
  124. self.add_file(file)
  125. elif type(file)==list:
  126. self.add_file(*file)
  127. else:
  128. p("add files???",file)
  129. def add_file(self,file_name,fnx={}):
  130. self.files[file_name] = {"ftxt":"",**fnx}
  131. def rld_files(self):
  132. # p()
  133. ret = {
  134. "errs":{},
  135. "all":{},
  136. "alle":{},
  137. }
  138. # for k in self.files:
  139. for k in [*self.files]:
  140. self.rld_file(k,ret)
  141. p("rld_files!")
  142. p("",end="",flush=True)
  143. return ret
  144. def fn1(*a,**kw):
  145. # rld_files
  146. glob_cl.rman.rld_files()
  147. glob_cl = globCL()
  148. # print("..",end="\n",flush=True)
  149. def redis_info():
  150. rconn = glob_cl.rconn
  151. keys = rconn.keys()
  152. for k in keys:
  153. p(":",k)
  154. p("len(keys)",len(keys))
  155. print("",end="",flush=True)
  156. # rconn.flushall()
  157. redis_info()
  158. r"""
  159. def atexit_fn():
  160. pass
  161. # rconn.flushall()
  162. print("ATEXIT FN")
  163. rinfo_len()
  164. keys = rconn.keys()
  165. print(keys)
  166. print(len(keys))
  167. print("t 000")
  168. # time.sleep(10)
  169. print("t 010")
  170. # time.sleep(20)
  171. print("t 020")
  172. print("ATEXIT FN...")
  173. rconn.flushall()
  174. atexit.register(atexit_fn)
  175. # """