Explorar el Código

add abtest config: 262

liqian hace 2 años
padre
commit
975bf09910
Se han modificado 4 ficheros con 59 adiciones y 45 borrados
  1. 41 33
      config.py
  2. 12 7
      recommend.py
  3. 3 3
      utils.py
  4. 3 2
      video_recall.py

+ 41 - 33
config.py

@@ -19,6 +19,41 @@ class BaseConfig(object):
         'BLESSING_YEAR': 3,  # 票圈福年
     }
 
+    REGION_CODE = {
+        '北京': '110000', '天津': '120000', '河北省': '130000', '山西省': '140000', '内蒙古': '150000',
+        '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000',
+        '上海': '310000', '江苏省': '320000', '浙江省': '330000', '安徽省': '340000', '福建省': '350000', '江西省': '360000',
+        '山东省': '370000',
+        '河南省': '410000', '湖北省': '420000', '湖南省': '430000', '广东省': '440000', '广西': '450000', '海南省': '460000',
+        '重庆': '500000', '四川省': '510000', '贵州省': '520000', '云南省': '530000', '西藏': '540000',
+        '陕西省': '610000', '甘肃省': '620000', '青海省': '630000', '宁夏': '640000', '新疆': '650000',
+        '台湾省': '710000', '香港': '810000', '澳门': '820000',
+    }
+    CITY_CODE = {
+        '广州': '440100', '深圳': '440300', '成都': '510100', '长沙': '430100',
+    }
+
+    # 本山祝福视频redis存储key
+    BENSHAN_ZHUFU_KEY_NAME = 'benshanzf:videos'
+    # 特殊地区屏蔽危险视频redis存储key
+    SPECIAL_AREA_LIMIT_KEY_NAME = 'special:area:limit:videos'
+    # 屏蔽视频配置 key:region_code, value:videos key list
+    SHIELD_CONFIG = {}
+    SHIELD_CONFIG2 = {
+        '-1': [SPECIAL_AREA_LIMIT_KEY_NAME, ],
+        CITY_CODE['广州']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
+        CITY_CODE['深圳']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
+        CITY_CODE['成都']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
+        CITY_CODE['长沙']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
+        REGION_CODE['北京']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
+    }
+    # 涉政视频可分发的端
+    POLITICAL_RECOMMEND_APP_TYPE_LIST = [
+        APP_TYPE['VLOG'],  # vlog
+        APP_TYPE['LOVE_LIVE'],  # 票圈视频
+        APP_TYPE['APP'],  # 票圈视频APP
+    ]
+
     # abTest
     AB_TEST = {
         'w_h_rate': [APP_TYPE['LONG_VIDEO']],  # 视频宽高比实验(每组的前两个视频调整为横屏视频), 已下线
@@ -100,6 +135,7 @@ class BaseConfig(object):
             'abtest_224': 60043,
             'abtest_228': 60044,
             'abtest_229': 60045,
+            'abtest_262': 60046,
         },  # 地域分组小时级规则实验
 
         'rank_by_24h': {
@@ -271,6 +307,11 @@ class BaseConfig(object):
             'ab_code': AB_CODE['region_rank_by_h'].get('abtest_229'),
             'religion_class_name': 'christianity'
         },  # 老好看 基督教 - 2插1
+        '262': {
+            'data_key': 'data1', 'rule_key': 'rule4-2',
+            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_262'),
+            'shield_config': SHIELD_CONFIG2,
+        },  # vlog:data-vlog, rule-rule4-2
     }
 
     # APP ab实验配置
@@ -641,39 +682,6 @@ class BaseConfig(object):
 
     }
 
-    REGION_CODE = {
-        '北京': '110000', '天津': '120000', '河北省': '130000', '山西省': '140000', '内蒙古': '150000',
-        '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000',
-        '上海': '310000', '江苏省': '320000', '浙江省': '330000', '安徽省': '340000', '福建省': '350000', '江西省': '360000',
-        '山东省': '370000',
-        '河南省': '410000', '湖北省': '420000', '湖南省': '430000', '广东省': '440000', '广西': '450000', '海南省': '460000',
-        '重庆': '500000', '四川省': '510000', '贵州省': '520000', '云南省': '530000', '西藏': '540000',
-        '陕西省': '610000', '甘肃省': '620000', '青海省': '630000', '宁夏': '640000', '新疆': '650000',
-        '台湾省': '710000', '香港': '810000', '澳门': '820000',
-    }
-    CITY_CODE = {
-        '广州': '440100', '深圳': '440300', '成都': '510100', '长沙': '430100',
-    }
-
-    # 本山祝福视频redis存储key
-    BENSHAN_ZHUFU_KEY_NAME = 'benshanzf:videos'
-    # 特殊地区屏蔽危险视频redis存储key
-    SPECIAL_AREA_LIMIT_KEY_NAME = 'special:area:limit:videos'
-    # 屏蔽视频配置 key:region_code, value:videos key list
-    SHIELD_CONFIG = {
-        '-1': [SPECIAL_AREA_LIMIT_KEY_NAME, ],
-        CITY_CODE['广州']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
-        CITY_CODE['深圳']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
-        CITY_CODE['成都']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
-        CITY_CODE['长沙']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
-        REGION_CODE['北京']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
-    }
-    # 涉政视频可分发的端
-    POLITICAL_RECOMMEND_APP_TYPE_LIST = [
-        APP_TYPE['VLOG'],  # vlog
-        APP_TYPE['LOVE_LIVE'],  # 票圈视频
-        APP_TYPE['APP'],  # 票圈视频APP
-    ]
     # 调用后端接口过滤参数配置 1-已观看 2-视频状态 3-是否进入老年人社区 4-话题状态 5-推荐状态 6-白名单过滤 7-涉政视频过滤
     FILTER_VIEWED_TYPES_CONFIG = {
         APP_TYPE['VLOG']: (1, 6,),  # vlog

+ 12 - 7
recommend.py

@@ -138,7 +138,8 @@ def positon_duplicate(pos1_vids, pos2_vids, videos):
 
 def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, algo_type, client_info,
                     expire_time=24*3600, ab_code=config_.AB_CODE['initial'], rule_key='', data_key='',
-                    no_op_flag=False, old_video_index=-1, video_id=None, params=None, rule_key_30day=None):
+                    no_op_flag=False, old_video_index=-1, video_id=None, params=None, rule_key_30day=None,
+                    shield_config=None):
     """
     首页线上推荐逻辑
     :param request_id: request_id
@@ -179,7 +180,7 @@ def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, al
     pool_recall = PoolRecall(request_id=request_id,
                              app_type=app_type, mid=mid, uid=uid, ab_code=ab_code,
                              client_info=client_info, rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
-                             params=params, rule_key_30day=rule_key_30day)
+                             params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
     # _, last_rov_recall_key, _ = pool_recall.get_video_last_idx()
     # # 小时级实验
     # if ab_code in [code for _, code in config_.AB_CODE['rank_by_h'].items()]:
@@ -566,6 +567,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, mid, app_typ
     rule_key = param.get('rule_key')
     data_key = param.get('data_key')
     rule_key_30day = param.get('30day_rule_key')
+    shield_config = config_.SHIELD_CONFIG
 
     # 默认使用 095 实验的配置
     # ab_code = config_.AB_EXP_CODE['095'].get('ab_code')
@@ -671,6 +673,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, mid, app_typ
                         rule_key = param.get('rule_key')
                         data_key = param.get('data_key')
                         rule_key_30day = param.get('30day_rule_key')
+                        shield_config = param.get('shield_config', config_.SHIELD_CONFIG)
                         break
 
             """
@@ -959,7 +962,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, mid, app_typ
     #             data_key = 'data1'
     #             no_op_flag = True
 
-    return top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day
+    return top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day, shield_config
 
 
 def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
@@ -1025,7 +1028,8 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
         return recommend_result
 
     # 普通mid推荐处理
-    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day = \
+    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, \
+    no_op_flag, old_video_index, rule_key_30day, shield_config = \
         get_recommend_params(recommend_type=0, ab_exp_info=ab_exp_info, ab_info_data=ab_info_data, mid=mid,
                              app_type=app_type)
     # log_.info({
@@ -1048,7 +1052,7 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
                              ab_code=ab_code, expire_time=expire_time,
                              rule_key=rule_key, data_key=data_key,
                              no_op_flag=no_op_flag, old_video_index=old_video_index,
-                             params=params, rule_key_30day=rule_key_30day)
+                             params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
     # log_.info({
     #     'logTimestamp': int(time.time() * 1000),
     #     'request_id': request_id,
@@ -1113,7 +1117,8 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
         # return rank_result
 
     # 普通mid推荐处理
-    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day = \
+    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, \
+    no_op_flag, old_video_index, rule_key_30day, shield_config = \
         get_recommend_params(recommend_type=1, ab_exp_info=ab_exp_info, ab_info_data=ab_info_data, page_type=page_type,
                              mid=mid, app_type=app_type)
     # log_.info({
@@ -1136,7 +1141,7 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
                              ab_code=ab_code, expire_time=expire_time,
                              rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
                              old_video_index=old_video_index, video_id=video_id,
-                             params=params, rule_key_30day=rule_key_30day)
+                             params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
     # log_.info({
     #     'logTimestamp': int(time.time() * 1000),
     #     'request_id': request_id,

+ 3 - 3
utils.py

@@ -287,7 +287,7 @@ class FilterVideos(object):
         else:
             return [int(video_id) for video_id in filtered_viewed_result]
 
-    def filter_videos(self, pool_type='rov', region_code=None):
+    def filter_videos(self, pool_type='rov', region_code=None, shield_config=None):
         """视频过滤"""
         # 预曝光过滤
         st_pre = time.time()
@@ -338,10 +338,10 @@ class FilterVideos(object):
         filtered_viewed_videos = [int(video_id) for video_id in filtered_viewed_result]
         if pool_type == 'flow':
             # 流量池视频需过滤屏蔽视频
-            if region_code is None:
+            if region_code is None or shield_config is None:
                 return filtered_viewed_videos
             else:
-                shield_key_name_list = config_.SHIELD_CONFIG.get(region_code, None)
+                shield_key_name_list = shield_config.get(region_code, None)
                 if shield_key_name_list is not None:
                     filtered_shield_video_ids = self.filter_shield_video(
                         video_ids=filtered_viewed_videos, shield_key_name_list=shield_key_name_list

+ 3 - 2
video_recall.py

@@ -16,7 +16,7 @@ config_ = set_config()
 class PoolRecall(object):
     """召回"""
     def __init__(self, request_id, app_type, client_info=None, mid='', uid='', ab_code='',
-                 rule_key='', data_key='', no_op_flag=False, params=None, rule_key_30day=None):
+                 rule_key='', data_key='', no_op_flag=False, params=None, rule_key_30day=None, shield_config=None):
         """
         初始化
         :param request_id: request_id
@@ -37,6 +37,7 @@ class PoolRecall(object):
         self.data_key = data_key
         self.no_op_flag = no_op_flag
         self.rule_key_30day = rule_key_30day
+        self.shield_config = shield_config
         self.redis_helper = RedisHelper(params=params)
 
     def copy_redis_zset_data(self, from_key_name, to_key_name):
@@ -499,7 +500,7 @@ class PoolRecall(object):
             # 过滤
             filter_ = FilterVideos(request_id=self.request_id,
                                    app_type=self.app_type, mid=self.mid, uid=self.uid, video_ids=video_ids)
-            ge = gevent.spawn(filter_.filter_videos, pool_type='flow', region_code=region_code)
+            ge = gevent.spawn(filter_.filter_videos, pool_type='flow', region_code=region_code, shield_config=shield_config)
             ge.join()
             filtered_result = ge.get()
             # 检查可分发数