|
@@ -3,17 +3,54 @@ import multiprocessing
|
|
|
import traceback
|
|
|
|
|
|
from datetime import datetime
|
|
|
+
|
|
|
+import config
|
|
|
from log import Log
|
|
|
from config import set_config
|
|
|
from video_recall import PoolRecall
|
|
|
from video_rank import video_rank, bottom_strategy, video_rank_by_w_h_rate
|
|
|
from db_helper import RedisHelper
|
|
|
import gevent
|
|
|
+from utils import FilterVideos
|
|
|
+import ast
|
|
|
|
|
|
log_ = Log()
|
|
|
config_ = set_config()
|
|
|
|
|
|
|
|
|
+def video_position_recommend(mid, uid, size, app_type, algo_type, client_info, videos):
|
|
|
+ # videos = video_recommend(mid=mid, uid=uid, size=size, app_type=app_type,
|
|
|
+ # algo_type=algo_type, client_info=client_info)
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ pos1_vids = redis_helper.get_data_from_redis(config.BaseConfig.RECALL_POSITION1_KEY_NAME)
|
|
|
+ pos2_vids = redis_helper.get_data_from_redis(config.BaseConfig.RECALL_POSITION2_KEY_NAME)
|
|
|
+ if pos1_vids is not None:
|
|
|
+ pos1_vids = ast.literal_eval(pos1_vids)
|
|
|
+ if pos2_vids is not None:
|
|
|
+ pos2_vids = ast.literal_eval(pos2_vids)
|
|
|
+
|
|
|
+ pos1_vids = [int(i) for i in pos1_vids]
|
|
|
+ pos2_vids = [int(i) for i in pos2_vids]
|
|
|
+
|
|
|
+ filter_1 = FilterVideos(app_type=app_type, video_ids=pos1_vids, mid=mid, uid=uid)
|
|
|
+ filter_2 = FilterVideos(app_type=app_type, video_ids=pos2_vids, mid=mid, uid=uid)
|
|
|
+ t = [gevent.spawn(filter_1.filter_videos), gevent.spawn(filter_2.filter_videos)]
|
|
|
+ gevent.joinall(t)
|
|
|
+ filted_list = [i.get() for i in t]
|
|
|
+
|
|
|
+ pos1_vids = filted_list[0]
|
|
|
+ pos2_vids = filted_list[1]
|
|
|
+
|
|
|
+ if pos1_vids is not None and len(pos1_vids) >0 :
|
|
|
+ videos.insert(0, {'videoId': int(pos1_vids[0]), 'rovScore': 100,
|
|
|
+ 'pushFrom': config_.PUSH_FROM['position_insert'], 'abCode': config_.AB_CODE['position_insert']})
|
|
|
+ if pos2_vids is not None and len(pos2_vids) >0 :
|
|
|
+ videos.insert(1, {'videoId': int(pos2_vids[0]), 'rovScore': 100,
|
|
|
+ 'pushFrom': config_.PUSH_FROM['position_insert'], 'abCode': config_.AB_CODE['position_insert']})
|
|
|
+
|
|
|
+ return videos[:10]
|
|
|
+
|
|
|
+
|
|
|
def video_recommend(mid, uid, size, app_type, algo_type, client_info):
|
|
|
"""
|
|
|
首页线上推荐逻辑
|
|
@@ -47,7 +84,7 @@ def video_recommend(mid, uid, size, app_type, algo_type, client_info):
|
|
|
recall_result_list = []
|
|
|
pool_recall = PoolRecall(app_type=app_type, mid=mid, uid=uid, ab_code=ab_code, client_info=client_info)
|
|
|
_, last_rov_recall_key, _ = pool_recall.get_video_last_idx()
|
|
|
- t = [gevent.spawn(pool_recall.rov_pool_recall, size), gevent.spawn(pool_recall.flow_pool_recall, size) ]
|
|
|
+ t = [gevent.spawn(pool_recall.rov_pool_recall, size), gevent.spawn(pool_recall.flow_pool_recall, size)]
|
|
|
gevent.joinall(t)
|
|
|
recall_result_list = [i.get() for i in t]
|
|
|
|
|
@@ -83,6 +120,13 @@ def video_recommend(mid, uid, size, app_type, algo_type, client_info):
|
|
|
rank_result = video_rank_by_w_h_rate(videos=videos)
|
|
|
log_.info('app_type: {}, mid: {}, uid: {}, rank_result: {}, execute time = {}ms'.format(
|
|
|
app_type, mid, uid, rank_result, (end_rank - start_rank) * 1000))
|
|
|
+ #按position位置排序
|
|
|
+ if app_type == config_.APP_TYPE['SHORT_VIDEO']:
|
|
|
+ rank_result = video_position_recommend(mid, uid, size, app_type, algo_type, client_info, rank_result)
|
|
|
+ print('===========================')
|
|
|
+ print(rank_result)
|
|
|
+ log_.info('app_type: {}, mid: {}, uid: {}, rank_result: {}, execute time = {}ms'.format(
|
|
|
+ app_type, mid, uid, rank_result, (end_rank - start_rank) * 1000))
|
|
|
|
|
|
# ####### redis数据刷新
|
|
|
# log_.info('====== update redis')
|
|
@@ -92,7 +136,7 @@ def video_recommend(mid, uid, size, app_type, algo_type, client_info):
|
|
|
preview_video_ids = [int(item['videoId']) for item in rank_result]
|
|
|
if preview_video_ids:
|
|
|
# log_.error('key_name = {} \n values = {}'.format(preview_key_name, tuple(preview_video_ids)))
|
|
|
- redis_helper.add_data_with_set(key_name=preview_key_name, values=tuple(preview_video_ids), expire_time=30*60)
|
|
|
+ redis_helper.add_data_with_set(key_name=preview_key_name, values=tuple(preview_video_ids), expire_time=30 * 60)
|
|
|
log_.info('preview redis update success!')
|
|
|
|
|
|
# 将此次获取的ROV召回池config_.K末位视频id同步刷新到Redis中,方便下次快速定位到召回位置,过期时间为1天
|