Cache.py
4.3 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# coding=utf-8
#author: 4N
#createtime: 2021/10/18
#email: nheweijun@sina.com
from kazoo.client import KazooClient
import configure
import time
from app.modules.service.models import ImageService
from app.modules.service.models import TileScheme,Service
from app.util.component.ModelVisitor import ModelVisitor
from app.util.component.StructuredPrint import StructurePrint
import json
import traceback
class Cache:
@classmethod
def cache_data(cls,guid_or_name,type="guid"):
from app import GLOBAL_DIC
# 缓存zookeeper
zoo = GLOBAL_DIC.get("zookeeper")
if zoo is None:
zoo: KazooClient = KazooClient(hosts=configure.zookeeper, timeout=1)
zoo.start()
GLOBAL_DIC["zookeeper"] = zoo
GLOBAL_DIC["zookeeper_updatetime"] = time.time()
else:
if not zoo.connected:
try:
zoo.start()
except:
pass
# 更新zoo
# if not GLOBAL_DIC.get("zookeeper_updatetime"):
# GLOBAL_DIC["zookeeper_updatetime"] = time.time()
# if time.time() - GLOBAL_DIC["zookeeper_updatetime"] > 15:
# #释放,高并发下可行吗,线程安全问题,别人正在用,关闭不了
# try:
# # zoo.stop()
# # zoo.close()
# del zoo
# except Exception as e:
# StructurePrint().print("关闭zoo失败")
# StructurePrint().print(e.__str__())
# zoo: KazooClient = KazooClient(hosts=configure.zookeeper, timeout=1)
# zoo.start()
# GLOBAL_DIC["zookeeper"] = zoo
# GLOBAL_DIC["zookeeper_updatetime"] = time.time()
# 缓存数据服务器
servers = GLOBAL_DIC.get("servers")
if servers is None:
servers = zoo.get_children("/rpc")
servers.append("本地服务器")
GLOBAL_DIC["servers"] = servers
GLOBAL_DIC["servers_updatetime"] = time.time()
else:
servers = GLOBAL_DIC.get("servers")
# 更新缓存
if time.time() - GLOBAL_DIC["servers_updatetime"] > 15:
servers = zoo.get_children("/rpc")
servers.append("本地服务器")
GLOBAL_DIC["servers"] = servers
GLOBAL_DIC["servers_updatetime"] = time.time()
# 缓存服务信息
if guid_or_name:
image_service_info = GLOBAL_DIC.get(guid_or_name)
if image_service_info is None or time.time() - GLOBAL_DIC.get("service_updatetime") > 15:
if type.__eq__("guid"):
image_service: ImageService = ImageService.query.filter_by(guid=guid_or_name).one_or_none()
else:
image_service: ImageService = ImageService.query.filter_by(name=guid_or_name).one_or_none()
images = image_service.images.all()
if image_service.scheme_guid:
scheme: TileScheme = TileScheme.query.filter_by(guid=image_service.scheme_guid).one_or_none()
GLOBAL_DIC[guid_or_name] = {"service": ModelVisitor.object_to_json(image_service),
"images": ModelVisitor.objects_to_jsonarray(images),
"scheme": json.loads(scheme.parameter)}
# GLOBAL_DIC[guid_or_name] = {"service": ModelVisitor.object_to_json(image_service),
# "images": ModelVisitor.objects_to_jsonarray(images),
# "scheme": json.loads(json.loads(image_service.scheme).get("parameter"))}
else:
GLOBAL_DIC[guid_or_name] = {"service": ModelVisitor.object_to_json(image_service),
"images": ModelVisitor.objects_to_jsonarray(images)}
GLOBAL_DIC["service_updatetime"] = time.time()
image_service_info = GLOBAL_DIC[guid_or_name]
else:
image_service_info = GLOBAL_DIC[guid_or_name]
else:
image_service_info = None
return image_service_info,zoo,servers