|
@@ -1202,7 +1202,7 @@ class PoolRecall(object):
|
|
|
idx = 0
|
|
|
return key_name, last_region_dup_key, idx
|
|
|
|
|
|
- def rov_pool_recall_with_region(self, size=4, expire_time=24*3600):
|
|
|
+ def rov_pool_recall_with_region_process(self, size=4, expire_time=24*3600):
|
|
|
"""
|
|
|
地域分组召回视频
|
|
|
:param size: 获取视频个数
|
|
@@ -1225,38 +1225,39 @@ class PoolRecall(object):
|
|
|
if region_code == '':
|
|
|
region_code = '-1'
|
|
|
|
|
|
- if self.ab_code == config_.AB_CODE['region_rank_by_h'].get('abtest_139'):
|
|
|
- if region_code == '-1':
|
|
|
- t = [
|
|
|
- gevent.spawn(self.recall_update_by_day, size, '30day'),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup2', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup3', expire_time)
|
|
|
- ]
|
|
|
- else:
|
|
|
- t = [
|
|
|
- gevent.spawn(self.recall_update_by_day, size, '30day'),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, 'region_h', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, 'region_24h', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup2', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup3', expire_time)
|
|
|
- ]
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if region_code == '-1':
|
|
|
+ t = [
|
|
|
+
|
|
|
+ gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup2', expire_time),
|
|
|
+ gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup3', expire_time)
|
|
|
+ ]
|
|
|
else:
|
|
|
- if region_code == '-1':
|
|
|
- t = [
|
|
|
-
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup2', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup3', expire_time)
|
|
|
- ]
|
|
|
- else:
|
|
|
- t = [
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, 'region_h', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, 'region_24h', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup2', expire_time),
|
|
|
- gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup3', expire_time)
|
|
|
- ]
|
|
|
+ t = [
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gevent.spawn(self.recall_region_dup_24h, region_code, size, 'region_h', expire_time),
|
|
|
+ gevent.spawn(self.recall_region_dup_24h, region_code, size, 'region_24h', expire_time),
|
|
|
+ gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup2', expire_time),
|
|
|
+ gevent.spawn(self.recall_region_dup_24h, region_code, size, '24h_dup3', expire_time)
|
|
|
+ ]
|
|
|
|
|
|
gevent.joinall(t)
|
|
|
region_recall_result_list = [i.get() for i in t]
|
|
@@ -1297,9 +1298,75 @@ 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']
|
|
|
+
|
|
|
+ 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
|
|
|
+ result.append(item)
|
|
|
+ return result
|
|
|
+
|
|
|
+ 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)
|
|
|
+ if data is None or len(data) == 0:
|
|
|
+ continue
|
|
|
+ for item in data:
|
|
|
+ video_id, flow_pool = item.split('-')
|
|
|
+ video_id = int(video_id)
|
|
|
+
|
|
|
+ cur_count = get_videos_local_distribute_count(video_id=video_id, flow_pool=flow_pool)
|
|
|
+
|
|
|
+ if cur_count is None:
|
|
|
+ continue
|
|
|
+
|
|
|
+ if cur_count <= 0:
|
|
|
+ remain_count_key = f"{config_.LOCAL_DISTRIBUTE_COUNT_PREFIX}{video_id}:{flow_pool}"
|
|
|
+ self.redis_helper.del_keys(remain_count_key)
|
|
|
+ for app_name in config_.APP_TYPE:
|
|
|
+ flow_pool_key = f"{config_.FLOWPOOL_KEY_NAME_PREFIX}{config_.APP_TYPE.get(app_name)}"
|
|
|
+ quick_flow_pool_key = f"{config_.QUICK_FLOWPOOL_KEY_NAME_PREFIX}" \
|
|
|
+ f"{config_.APP_TYPE.get(app_name)}:{config_.QUICK_FLOW_POOL_ID}"
|
|
|
+ self.redis_helper.remove_value_from_zset(key_name=flow_pool_key, value=item)
|
|
|
+ self.redis_helper.remove_value_from_zset(key_name=quick_flow_pool_key, value=item)
|
|
|
+ continue
|
|
|
+
|
|
|
+ if video_id in video_id_list:
|
|
|
+ videos_flow_pool[video_id].append(flow_pool)
|
|
|
+ else:
|
|
|
+ videos_flow_pool[video_id] = [flow_pool]
|
|
|
+ video_id_list.append(video_id)
|
|
|
+ return {'video_id_list': video_id_list, 'videos_flow_pool': videos_flow_pool}
|
|
|
+
|
|
|
def rov_pool_recall_with_region_by_h(self, province_code, size=4, key_flag=''):
|
|
|
"""
|
|
|
地域分组小时级视频召回
|