|  | @@ -592,7 +592,7 @@ def video_rank_with_old_video(rank_result, old_video_recall, size, top_K, old_vi
 | 
	
		
			
				|  |  |      return new_rank_result[:size]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -def video_new_rank2(data, size, top_K, flow_pool_P, ab_code):
 | 
	
		
			
				|  |  | +def video_new_rank2(data, size, top_K, flow_pool_P, ab_code, exp_config=None):
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |          视频分发排序
 | 
	
		
			
				|  |  |          :param data: 各路召回的视频 type-dict {'rov_pool_recall': [], 'flow_pool_recall': []}
 | 
	
	
		
			
				|  | @@ -602,7 +602,7 @@ def video_new_rank2(data, size, top_K, flow_pool_P, ab_code):
 | 
	
		
			
				|  |  |          :return: rank_result
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |      if not data['rov_pool_recall'] and not data['flow_pool_recall']:
 | 
	
		
			
				|  |  | -        return []
 | 
	
		
			
				|  |  | +        return [], 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      redisObj = RedisHelper()
 | 
	
		
			
				|  |  |      vidKeys = []
 | 
	
	
		
			
				|  | @@ -654,27 +654,61 @@ def video_new_rank2(data, size, top_K, flow_pool_P, ab_code):
 | 
	
		
			
				|  |  |          rank_result.extend(flow_recall_rank[:top_K])
 | 
	
		
			
				|  |  |          flow_recall_rank = flow_recall_rank[top_K:]
 | 
	
		
			
				|  |  |          # 按概率 p 及score排序获取 size - k 个视频
 | 
	
		
			
				|  |  | -    i = 0
 | 
	
		
			
				|  |  | -    while i < size - top_K:
 | 
	
		
			
				|  |  | -        # 随机生成[0, 1)浮点数
 | 
	
		
			
				|  |  | -        rand = random.random()
 | 
	
		
			
				|  |  | -        # log_.info('rand: {}'.format(rand))
 | 
	
		
			
				|  |  | -        if rand < flow_pool_P:
 | 
	
		
			
				|  |  | -            if flow_recall_rank:
 | 
	
		
			
				|  |  | -                rank_result.append(flow_recall_rank[0])
 | 
	
		
			
				|  |  | -                flow_recall_rank.remove(flow_recall_rank[0])
 | 
	
		
			
				|  |  | -            else:
 | 
	
		
			
				|  |  | -                rank_result.extend(rov_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | -                return rank_result[:size]
 | 
	
		
			
				|  |  | +    flow_num = 0
 | 
	
		
			
				|  |  | +    flowConfig = 0
 | 
	
		
			
				|  |  | +    if exp_config and exp_config['flowConfig']:
 | 
	
		
			
				|  |  | +        flowConfig = exp_config['flowConfig']
 | 
	
		
			
				|  |  | +    if flowConfig == 1 and len(rov_recall_rank) > 0:
 | 
	
		
			
				|  |  | +        for recall_item in rank_result:
 | 
	
		
			
				|  |  | +            flow_recall_name = recall_item.get("flowPool", '')
 | 
	
		
			
				|  |  | +            flow_num = flow_num + 1
 | 
	
		
			
				|  |  | +        all_recall_rank = rov_recall_rank + flow_recall_rank
 | 
	
		
			
				|  |  | +        if flow_num > 0:
 | 
	
		
			
				|  |  | +            rank_result.extend(all_recall_rank[:size - top_K])
 | 
	
		
			
				|  |  | +            return rank_result, flow_num
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  | -            if rov_recall_rank:
 | 
	
		
			
				|  |  | -                rank_result.append(rov_recall_rank[0])
 | 
	
		
			
				|  |  | -                rov_recall_rank.remove(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +            i = 0
 | 
	
		
			
				|  |  | +            while i < size - top_K:
 | 
	
		
			
				|  |  | +                # 随机生成[0, 1)浮点数
 | 
	
		
			
				|  |  | +                rand = random.random()
 | 
	
		
			
				|  |  | +                # log_.info('rand: {}'.format(rand))
 | 
	
		
			
				|  |  | +                if rand < flow_pool_P:
 | 
	
		
			
				|  |  | +                    if flow_recall_rank:
 | 
	
		
			
				|  |  | +                        rank_result.append(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                        flow_recall_rank.remove(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        rank_result.extend(rov_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                        return rank_result[:size], flow_num
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    if rov_recall_rank:
 | 
	
		
			
				|  |  | +                        rank_result.append(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                        rov_recall_rank.remove(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        rank_result.extend(flow_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                        return rank_result[:size], flow_num
 | 
	
		
			
				|  |  | +                i += 1
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +        i = 0
 | 
	
		
			
				|  |  | +        while i < size - top_K:
 | 
	
		
			
				|  |  | +            # 随机生成[0, 1)浮点数
 | 
	
		
			
				|  |  | +            rand = random.random()
 | 
	
		
			
				|  |  | +            # log_.info('rand: {}'.format(rand))
 | 
	
		
			
				|  |  | +            if rand < flow_pool_P:
 | 
	
		
			
				|  |  | +                if flow_recall_rank:
 | 
	
		
			
				|  |  | +                    rank_result.append(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                    flow_recall_rank.remove(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    rank_result.extend(rov_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                    return rank_result[:size], flow_num
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  | -                rank_result.extend(flow_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | -                return rank_result[:size]
 | 
	
		
			
				|  |  | -        i += 1
 | 
	
		
			
				|  |  | -    return rank_result[:size]
 | 
	
		
			
				|  |  | +                if rov_recall_rank:
 | 
	
		
			
				|  |  | +                    rank_result.append(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                    rov_recall_rank.remove(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    rank_result.extend(flow_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                    return rank_result[:size], flow_num
 | 
	
		
			
				|  |  | +            i += 1
 | 
	
		
			
				|  |  | +        return rank_result[:size], flow_num
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def video_sanke_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=None):
 | 
	
		
			
				|  |  |      """
 | 
	
	
		
			
				|  | @@ -686,8 +720,10 @@ def video_sanke_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=None
 | 
	
		
			
				|  |  |      :return: rank_result
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      if not data['rov_pool_recall'] and not data['flow_pool_recall'] \
 | 
	
		
			
				|  |  | -            and not data['hot_rcall'] and not data['hot_rcall']:
 | 
	
		
			
				|  |  | -        return []
 | 
	
		
			
				|  |  | +            and not data['u2i_recall'] and not data['u2i_recall'] \
 | 
	
		
			
				|  |  | +            and not data['w2v_recall'] and not data['w2v_recall'] \
 | 
	
		
			
				|  |  | +            and not data['sim_recall'] and not data['sim_recall']:
 | 
	
		
			
				|  |  | +        return [], 0
 | 
	
		
			
				|  |  |      # 地域分组小时级规则更新数据
 | 
	
		
			
				|  |  |      recall_dict = {}
 | 
	
		
			
				|  |  |      region_h_recall = [item for item in data['rov_pool_recall']
 | 
	
	
		
			
				|  | @@ -714,9 +750,9 @@ def video_sanke_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=None
 | 
	
		
			
				|  |  |      w2v_recall =[]
 | 
	
		
			
				|  |  |      sim_recall = []
 | 
	
		
			
				|  |  |      if ab_Code==60058:
 | 
	
		
			
				|  |  | -        if len(data['hot_recall'])>0:
 | 
	
		
			
				|  |  | -            hot_recall = sorted(data['hot_recall'], key=lambda k: k.get('rovScore', 0), reverse=True)
 | 
	
		
			
				|  |  | -        recall_dict['hot_recall'] = hot_recall
 | 
	
		
			
				|  |  | +        if len(data['u2i_recall'])>0:
 | 
	
		
			
				|  |  | +            hot_recall = sorted(data['u2i_recall'], key=lambda k: k.get('rovScore', 0), reverse=True)
 | 
	
		
			
				|  |  | +        recall_dict['u2i_recall'] = hot_recall
 | 
	
		
			
				|  |  |      elif ab_Code==60059:
 | 
	
		
			
				|  |  |          if len(data['w2v_recall'])>0:
 | 
	
		
			
				|  |  |              recall_dict['w2v_recall'] = data['w2v_recall']
 | 
	
	
		
			
				|  | @@ -729,9 +765,9 @@ def video_sanke_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=None
 | 
	
		
			
				|  |  |              recall_dict['sim_recall'] = sim_recall
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      recall_list = [('rov_recall_region_h',1, 1),('rov_recall_region_h',0.5, 1),('rov_recall_region_24h',1,1),
 | 
	
		
			
				|  |  | -                   ('hot_recall',0.5,1), ('w2v_recall',0.5,1),('rov_recall_24h',1,1), ('rov_recall_24h_dup',0.5,1)]
 | 
	
		
			
				|  |  | -    if exp_config is not  None:
 | 
	
		
			
				|  |  | -        recall_list = exp_config
 | 
	
		
			
				|  |  | +                   ('u2i_recall',0.5,1), ('w2v_recall',0.5,1),('rov_recall_24h',1,1), ('rov_recall_24h_dup',0.5,1)]
 | 
	
		
			
				|  |  | +    if exp_config  and exp_config['recall_list']:
 | 
	
		
			
				|  |  | +        recall_list = exp_config['recall_list']
 | 
	
		
			
				|  |  |      #print("recall_config:", recall_list)
 | 
	
		
			
				|  |  |      rov_recall_rank = []
 | 
	
		
			
				|  |  |      select_ids = set('')
 | 
	
	
		
			
				|  | @@ -779,29 +815,65 @@ def video_sanke_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=None
 | 
	
		
			
				|  |  |      else:
 | 
	
		
			
				|  |  |          rank_result.extend(flow_recall_rank[:top_K])
 | 
	
		
			
				|  |  |          flow_recall_rank = flow_recall_rank[top_K:]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    # 按概率 p 及score排序获取 size - k 个视频
 | 
	
		
			
				|  |  | -    i = 0
 | 
	
		
			
				|  |  | -    while i < size - top_K:
 | 
	
		
			
				|  |  | -        # 随机生成[0, 1)浮点数
 | 
	
		
			
				|  |  | -        rand = random.random()
 | 
	
		
			
				|  |  | -        # log_.info('rand: {}'.format(rand))
 | 
	
		
			
				|  |  | -        if rand < flow_pool_P:
 | 
	
		
			
				|  |  | -            if flow_recall_rank:
 | 
	
		
			
				|  |  | -                rank_result.append(flow_recall_rank[0])
 | 
	
		
			
				|  |  | -                flow_recall_rank.remove(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +    flow_num = 0
 | 
	
		
			
				|  |  | +    flowConfig =0
 | 
	
		
			
				|  |  | +    if exp_config and exp_config['flowConfig']:
 | 
	
		
			
				|  |  | +        flowConfig = exp_config['flowConfig']
 | 
	
		
			
				|  |  | +    if flowConfig == 1 and len(rov_recall_rank) > 0:
 | 
	
		
			
				|  |  | +        rank_result.extend(rov_recall_rank[:top_K])
 | 
	
		
			
				|  |  | +        for recall_item in rank_result:
 | 
	
		
			
				|  |  | +            flow_recall_name = recall_item.get("flowPool", '')
 | 
	
		
			
				|  |  | +            if flow_recall_name is not None and flow_recall_name.find("#") > -1:
 | 
	
		
			
				|  |  | +                flow_num = flow_num + 1
 | 
	
		
			
				|  |  | +            all_recall_rank = rov_recall_rank + flow_recall_rank
 | 
	
		
			
				|  |  | +            if flow_num > 0:
 | 
	
		
			
				|  |  | +                rank_result.extend(all_recall_rank[:size - top_K])
 | 
	
		
			
				|  |  | +                return rank_result[:size], flow_num
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  | -                rank_result.extend(rov_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | -                return rank_result[:size]
 | 
	
		
			
				|  |  | -        else:
 | 
	
		
			
				|  |  | -            if rov_recall_rank:
 | 
	
		
			
				|  |  | -                rank_result.append(rov_recall_rank[0])
 | 
	
		
			
				|  |  | -                rov_recall_rank.remove(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                # 按概率 p 及score排序获取 size - k 个视频
 | 
	
		
			
				|  |  | +                i = 0
 | 
	
		
			
				|  |  | +                while i < size - top_K:
 | 
	
		
			
				|  |  | +                    # 随机生成[0, 1)浮点数
 | 
	
		
			
				|  |  | +                    rand = random.random()
 | 
	
		
			
				|  |  | +                    # log_.info('rand: {}'.format(rand))
 | 
	
		
			
				|  |  | +                    if rand < flow_pool_P:
 | 
	
		
			
				|  |  | +                        if flow_recall_rank:
 | 
	
		
			
				|  |  | +                            rank_result.append(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                            flow_recall_rank.remove(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                        else:
 | 
	
		
			
				|  |  | +                            rank_result.extend(rov_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                            return rank_result[:size], flow_num
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        if rov_recall_rank:
 | 
	
		
			
				|  |  | +                            rank_result.append(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                            rov_recall_rank.remove(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                        else:
 | 
	
		
			
				|  |  | +                            rank_result.extend(flow_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                            return rank_result[:size], flow_num
 | 
	
		
			
				|  |  | +                    i += 1
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +        # 按概率 p 及score排序获取 size - k 个视频
 | 
	
		
			
				|  |  | +        i = 0
 | 
	
		
			
				|  |  | +        while i < size - top_K:
 | 
	
		
			
				|  |  | +            # 随机生成[0, 1)浮点数
 | 
	
		
			
				|  |  | +            rand = random.random()
 | 
	
		
			
				|  |  | +            # log_.info('rand: {}'.format(rand))
 | 
	
		
			
				|  |  | +            if rand < flow_pool_P:
 | 
	
		
			
				|  |  | +                if flow_recall_rank:
 | 
	
		
			
				|  |  | +                    rank_result.append(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                    flow_recall_rank.remove(flow_recall_rank[0])
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    rank_result.extend(rov_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                    return rank_result[:size], flow_num
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  | -                rank_result.extend(flow_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | -                return rank_result[:size]
 | 
	
		
			
				|  |  | -        i += 1
 | 
	
		
			
				|  |  | -    return rank_result[:size]
 | 
	
		
			
				|  |  | +                if rov_recall_rank:
 | 
	
		
			
				|  |  | +                    rank_result.append(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                    rov_recall_rank.remove(rov_recall_rank[0])
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    rank_result.extend(flow_recall_rank[:size - top_K - i])
 | 
	
		
			
				|  |  | +                    return rank_result[:size],flow_num
 | 
	
		
			
				|  |  | +            i += 1
 | 
	
		
			
				|  |  | +    return rank_result[:size], flow_num
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |