|
@@ -1,9 +1,10 @@
|
|
|
import datetime
|
|
|
+import numpy as np
|
|
|
from config import set_config
|
|
|
from log import Log
|
|
|
from utils import RedisHelper
|
|
|
|
|
|
-config_ = set_config()
|
|
|
+config_, _ = set_config()
|
|
|
log_ = Log()
|
|
|
redis_helper = RedisHelper()
|
|
|
|
|
@@ -15,22 +16,58 @@ def update_limit_video_score(initial_videos, key_name):
|
|
|
:param key_name: 视频列表对应的key
|
|
|
:return:
|
|
|
"""
|
|
|
+ if not initial_videos:
|
|
|
+ return
|
|
|
# 获取当前限流视频
|
|
|
data = redis_helper.get_data_from_redis(key_name=config_.KEY_NAME_PREFIX_LIMIT_VIDEOS)
|
|
|
if data is None:
|
|
|
return
|
|
|
- limit_video_id_list = [int(video[0]) for video in data]
|
|
|
# 获取限流视频对应的score
|
|
|
- limit_video_initial_score = {}
|
|
|
- for video_id in limit_video_id_list:
|
|
|
+ limit_video_initial_score = []
|
|
|
+ for video in data:
|
|
|
+ video_id = int(video[0])
|
|
|
initial_score = initial_videos.get(video_id, None)
|
|
|
if initial_score is not None:
|
|
|
- limit_video_initial_score[video_id] = initial_score
|
|
|
+ limit_video_initial_score.append((video_id, initial_score))
|
|
|
+
|
|
|
+ log_.info(f"limit_video_initial_score = {limit_video_initial_score}")
|
|
|
+
|
|
|
if len(limit_video_initial_score) == 0:
|
|
|
return
|
|
|
|
|
|
# 获取原始列表的分数的中位数
|
|
|
-
|
|
|
+ initial_video_score_list = sorted([val for key, val in initial_videos.items()], reverse=False)
|
|
|
+ media_score = np.median(initial_video_score_list)
|
|
|
+ # 取中位数后一位
|
|
|
+ if len(initial_video_score_list) % 2 == 0:
|
|
|
+ temp_index = len(initial_video_score_list)//2
|
|
|
+ else:
|
|
|
+ temp_index = len(initial_video_score_list) // 2 + 1
|
|
|
+ if len(initial_video_score_list) > 1:
|
|
|
+ temp_score = initial_video_score_list[temp_index]
|
|
|
+ else:
|
|
|
+ temp_score = 0
|
|
|
+
|
|
|
+ # 对限流视频score进行调整
|
|
|
+ limit_video_final_score = {}
|
|
|
+ limit_video_initial_score.sort(key=lambda x: x[1], reverse=True)
|
|
|
+ limit_video_id_list = []
|
|
|
+ for video_id, initial_score in limit_video_initial_score:
|
|
|
+ if initial_score > media_score:
|
|
|
+ limit_video_id_list.append(video_id)
|
|
|
+ if len(limit_video_id_list) > 0:
|
|
|
+ limit_score_step = (temp_score - media_score) / (len(limit_video_id_list) + 1)
|
|
|
+ for i, video_id in enumerate(limit_video_id_list):
|
|
|
+ final_score = media_score - limit_score_step * (i + 1)
|
|
|
+ limit_video_final_score[int(video_id)] = final_score
|
|
|
+
|
|
|
+ log_.info(f"media_score = {media_score}, temp_score = {temp_score}, "
|
|
|
+ f"limit_video_final_score = {limit_video_final_score}")
|
|
|
+
|
|
|
+ # 更新限流视频的score
|
|
|
+ if len(limit_video_final_score) == 0:
|
|
|
+ return
|
|
|
+ redis_helper.add_data_with_zset(key_name=key_name, data=limit_video_final_score)
|
|
|
|
|
|
|
|
|
def check_videos_distribute():
|
|
@@ -66,6 +103,8 @@ def check_region_videos():
|
|
|
|
|
|
# 获取已超分发视频
|
|
|
stop_distribute_video_id_list = check_videos_distribute()
|
|
|
+ log_.info(f"stop_distribute_video_id_list = {stop_distribute_video_id_list}, "
|
|
|
+ f"count = {len(stop_distribute_video_id_list)}")
|
|
|
if len(stop_distribute_video_id_list) == 0:
|
|
|
return
|
|
|
|
|
@@ -112,6 +151,13 @@ def check_region_videos():
|
|
|
log_.info(f"region = {region} videos check end!")
|
|
|
log_.info("region_h videos check end!")
|
|
|
|
|
|
+ # 将已超分发视频 移除 原始大列表
|
|
|
+ key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{datetime.datetime.strftime(now_date, '%Y%m%d')}"
|
|
|
+ if not redis_helper.key_exists(key_name=key_name):
|
|
|
+ redis_date = now_date - datetime.timedelta(days=1)
|
|
|
+ key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{datetime.datetime.strftime(redis_date, '%Y%m%d')}"
|
|
|
+ redis_helper.remove_value_from_zset(key_name=key_name, value=stop_distribute_video_id_list)
|
|
|
+
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
check_region_videos()
|