|
@@ -452,7 +452,7 @@ class PoolRecall(object):
|
|
|
region_code = '-1'
|
|
|
|
|
|
flow_pool_key = self.get_pool_redis_key('flow', flow_pool_id=flow_pool_id)
|
|
|
- print(flow_pool_key)
|
|
|
+ # print(flow_pool_key)
|
|
|
flow_pool_recall_result = []
|
|
|
flow_pool_recall_videos = []
|
|
|
# 每次获取的视频数
|
|
@@ -1301,43 +1301,66 @@ class PoolRecall(object):
|
|
|
return recall_result[:size]
|
|
|
|
|
|
def rov_pool_recall_with_region(self, size=4, expire_time=24*3600):
|
|
|
- t = [
|
|
|
- gevent.spawn(self.rov_pool_recall_with_region_process, size, expire_time),
|
|
|
- gevent.spawn(self.get_flow_pool_videos)
|
|
|
- ]
|
|
|
- gevent.joinall(t)
|
|
|
- result_list = [i.get() for i in t]
|
|
|
- videos = result_list[0]
|
|
|
- flow_pool_video_id_list, videos_flow_pool = result_list[1]['video_id_list'], result_list[1]['videos_flow_pool']
|
|
|
+ """召回池召回视频"""
|
|
|
+ # 获取召回池中视频
|
|
|
+ videos = self.rov_pool_recall_with_region_process(size=size, expire_time=expire_time)
|
|
|
# 对在流量池中存在的视频添加标记字段
|
|
|
- result = self.add_flow_pool_tag(videos, flow_pool_video_id_list, videos_flow_pool)
|
|
|
- return result
|
|
|
-
|
|
|
- def add_flow_pool_tag(self, videos, flow_pool_video_id_list, videos_flow_pool):
|
|
|
- """对在流量池中存在的视频添加标记字段"""
|
|
|
result = []
|
|
|
- # 判断视频是否在流量池视频中
|
|
|
for item in videos:
|
|
|
- if item['videoId'] in flow_pool_video_id_list:
|
|
|
- flow_pool_list = videos_flow_pool.get(item['videoId'], [])
|
|
|
- if len(flow_pool_list) > 0:
|
|
|
- flow_pool = flow_pool_list[0]
|
|
|
- item['flowPool'] = flow_pool
|
|
|
- item['isInFlowPool'] = 1
|
|
|
+ video_id = item['videoId']
|
|
|
+ t = [
|
|
|
+ gevent.spawn(self.get_video_flow_pool, video_id, True),
|
|
|
+ gevent.spawn(self.get_video_flow_pool, video_id, False)
|
|
|
+ ]
|
|
|
+ gevent.joinall(t)
|
|
|
+ flow_pool_list = [i.get() for i in t]
|
|
|
+ flow_pool_list = [item for item in flow_pool_list if item != '']
|
|
|
+ if len(flow_pool_list) > 0:
|
|
|
+ flow_pool = flow_pool_list[0]
|
|
|
+ item['flowPool'] = flow_pool
|
|
|
+ item['isInFlowPool'] = 1
|
|
|
result.append(item)
|
|
|
return result
|
|
|
|
|
|
+ def get_video_flow_pool(self, video_id, quick_flow_pool=False):
|
|
|
+ """
|
|
|
+ 获取videoId对应的任意一个flowPool
|
|
|
+ :param video_id: videoId
|
|
|
+ :param quick_flow_pool: 是否为快速曝光流量池标识,默认:否 False
|
|
|
+ :return: flow_pool
|
|
|
+ """
|
|
|
+ if quick_flow_pool is True:
|
|
|
+ isin_flow_pool_key = \
|
|
|
+ f"{config_.QUICK_FLOWPOOL_VIDEO_ID_KEY_NAME_PREFIX}{self.app_type}:{config_.QUICK_FLOW_POOL_ID}"
|
|
|
+ flow_pool_key = \
|
|
|
+ f"{config_.QUICK_FLOWPOOL_VIDEO_INFO_KEY_NAME_PREFIX}{self.app_type}:" \
|
|
|
+ f"{config_.QUICK_FLOW_POOL_ID}:{video_id}"
|
|
|
+ else:
|
|
|
+ isin_flow_pool_key = \
|
|
|
+ f"{config_.FLOWPOOL_VIDEO_ID_KEY_NAME_PREFIX}{self.app_type}"
|
|
|
+ flow_pool_key = \
|
|
|
+ f"{config_.FLOWPOOL_VIDEO_INFO_KEY_NAME_PREFIX}{self.app_type}:{video_id}"
|
|
|
+
|
|
|
+ # 判断是否在流量池中
|
|
|
+ isin_flow_pool = self.redis_helper.data_exists_with_set(key_name=isin_flow_pool_key, value=video_id)
|
|
|
+ flow_pool = ''
|
|
|
+ if isin_flow_pool:
|
|
|
+ # 随机获取一个flowPool标记
|
|
|
+ flow_pool_list = self.redis_helper.get_data_with_count_from_set(key_name=flow_pool_key, count=1)
|
|
|
+ if len(flow_pool_list) > 0:
|
|
|
+ flow_pool = flow_pool_list[0]
|
|
|
+ return flow_pool
|
|
|
+
|
|
|
def get_flow_pool_videos(self):
|
|
|
"""获取当前可分发的流量池视频,以及对应的标记列表"""
|
|
|
video_id_list = []
|
|
|
videos_flow_pool = {}
|
|
|
- redis_helper = RedisHelper()
|
|
|
# 快速曝光流量池
|
|
|
key_name_quick = f"{config_.QUICK_FLOWPOOL_KEY_NAME_PREFIX}{self.app_type}:{config_.QUICK_FLOW_POOL_ID}"
|
|
|
# 其他流量池
|
|
|
key_name_other = f"{config_.FLOWPOOL_KEY_NAME_PREFIX}{self.app_type}"
|
|
|
for key_name in [key_name_quick, key_name_other]:
|
|
|
- data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=False)
|
|
|
+ data = self.redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=False)
|
|
|
if data is None or len(data) == 0:
|
|
|
continue
|
|
|
for item in data:
|