# 优化性能

This commit is contained in:
xianfuxing 2020-08-10 17:22:15 +08:00
parent 1a681a3c67
commit f8945b4d78
1 changed files with 29 additions and 5 deletions

View File

@ -1,3 +1,4 @@
import time
from django.db.models import Q, Min, Max
from django.core.cache import cache
from rest_framework import serializers
@ -22,6 +23,28 @@ def get_vol(device_id, cur_vol):
return '{}{}'.format(round(vol, 1), '%')
def get_latest(device_id):
latest_key = 'device_latest_{}'.format(device_id)
latest = cache.get(latest_key)
if not latest:
latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0]
cache.set(latest_key, latest, 60 * 10)
return latest
def get_device(device_id):
device_key = 'device_lon_{}'.format(device_id)
device = cache.get(device_key)
if not device:
qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time')
if qs.count() > 0:
device = qs.first()
cache.set(device_key, device, 60 * 10)
else:
return None
return device
class DeviceCountSerializer(serializers.ModelSerializer):
device_name = serializers.SerializerMethodField()
mosq_count = serializers.SerializerMethodField()
@ -132,7 +155,8 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
def get_count(self, obj):
try:
self.latest = DeviceCount.objects.filter(device_id=obj.device_id).order_by('-data_time')[0]
# self.latest = DeviceCount.objects.filter(device_id=obj.device_id).order_by('-data_time')[0]
self.latest = get_latest(obj.device_id)
except IndexError:
self.latest = None
if self.latest:
@ -157,10 +181,10 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
if lon and lat:
return [lon, lat]
query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
if query:
q = query[0]
return [q.longitude, q.latitude]
# query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
device = get_device(obj.device_id)
if device:
return [device.longitude, device.latitude]
return None
def get_time(self, obj):