|
@@ -49,21 +49,11 @@ class PoolRecall(object):
|
|
|
else:
|
|
|
return False
|
|
|
|
|
|
- def update_mid_data(self, province_code):
|
|
|
- # mid对应小时级视频列表 redis-key
|
|
|
- h_recall_mid_key = f"{config_.H_WITH_MID_RECALL_KEY_NAME_PREFIX}{self.mid}"
|
|
|
- # 判断mid对应小时级视频列表 时间记录
|
|
|
- h_record_key = f"{config_.H_WITH_MID_RECORD_KEY_NAME_PREFIX}{self.mid}"
|
|
|
+ def update_mid_data(self, h_recall_mid_key, h_record_key, key_prefix):
|
|
|
# 判断当前小时的小时级列表是否更新
|
|
|
now_date = datetime.today()
|
|
|
h = datetime.now().hour
|
|
|
now_dt = datetime.strftime(now_date, '%Y%m%d')
|
|
|
- if self.ab_code in [code for _, code in config_.AB_CODE['region_rank_by_h'].items()]:
|
|
|
- key_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H}{province_code}."
|
|
|
- elif self.ab_code in [code for _, code in config_.AB_CODE['rank_by_24h'].items()]:
|
|
|
- key_prefix = config_.RECALL_KEY_NAME_PREFIX_BY_24H
|
|
|
- else:
|
|
|
- key_prefix = config_.RECALL_KEY_NAME_PREFIX_BY_H
|
|
|
now_h_recall_key = f"{key_prefix}{self.rule_key}.{now_dt}.{h}"
|
|
|
if self.redis_helper.key_exists(key_name=now_h_recall_key):
|
|
|
flag = self.copy_redis_zset_data(from_key_name=now_h_recall_key, to_key_name=h_recall_mid_key)
|
|
@@ -83,14 +73,32 @@ class PoolRecall(object):
|
|
|
value = {'date': redis_dt, 'h': redis_h}
|
|
|
self.redis_helper.set_data_to_redis(key_name=h_record_key, value=str(value), expire_time=2*3600)
|
|
|
|
|
|
- def get_mid_h_key(self, province_code):
|
|
|
- # mid对应小时级视频列表 redis-key
|
|
|
- h_recall_mid_key = f"{config_.H_WITH_MID_RECALL_KEY_NAME_PREFIX}{self.mid}"
|
|
|
- # 判断mid对应小时级视频列表 时间记录
|
|
|
- h_record_key = f"{config_.H_WITH_MID_RECORD_KEY_NAME_PREFIX}{self.mid}"
|
|
|
+ def get_mid_h_key(self, province_code, key_flag=''):
|
|
|
+ if key_flag == 'region_24h':
|
|
|
+ # mid对应小时级视频列表 redis-key
|
|
|
+ h_recall_mid_key = f"{config_.H_WITH_MID_RECALL_KEY_NAME_PREFIX_REGION_24H}{self.mid}"
|
|
|
+ # 判断mid对应小时级视频列表 时间记录
|
|
|
+ h_record_key = f"{config_.H_WITH_MID_RECORD_KEY_NAME_PREFIX_REGION_24H}{self.mid}"
|
|
|
+ else:
|
|
|
+ # mid对应小时级视频列表 redis-key
|
|
|
+ h_recall_mid_key = f"{config_.H_WITH_MID_RECALL_KEY_NAME_PREFIX}{self.mid}"
|
|
|
+ # 判断mid对应小时级视频列表 时间记录
|
|
|
+ h_record_key = f"{config_.H_WITH_MID_RECORD_KEY_NAME_PREFIX}{self.mid}"
|
|
|
+
|
|
|
+ # 列表存储 redis-key prefix
|
|
|
+ if self.ab_code in [code for _, code in config_.AB_CODE['region_rank_by_h'].items()]:
|
|
|
+ if key_flag == 'region_24h':
|
|
|
+ key_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H}{province_code}."
|
|
|
+ else:
|
|
|
+ key_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H}{province_code}."
|
|
|
+ elif self.ab_code in [code for _, code in config_.AB_CODE['rank_by_24h'].items()]:
|
|
|
+ key_prefix = config_.RECALL_KEY_NAME_PREFIX_BY_24H
|
|
|
+ else:
|
|
|
+ key_prefix = config_.RECALL_KEY_NAME_PREFIX_BY_H
|
|
|
+
|
|
|
if not self.redis_helper.key_exists(key_name=h_record_key):
|
|
|
# ###### 记录key不存在,copy列表,更新记录
|
|
|
- self.update_mid_data(province_code=province_code)
|
|
|
+ self.update_mid_data(h_recall_mid_key=h_recall_mid_key, h_record_key=h_record_key, key_prefix=key_prefix)
|
|
|
# return h_recall_mid_key
|
|
|
else:
|
|
|
# ###### 记录key存在,判断date, h
|
|
@@ -107,12 +115,6 @@ class PoolRecall(object):
|
|
|
# return h_recall_mid_key
|
|
|
elif (record_dt == now_dt and h-int(record_h) == 1) or (h == 0 and int(record_h) == 23):
|
|
|
# 记录的h - 当前h = 1,判断当前h数据是否已更新
|
|
|
- if self.ab_code in [code for _, code in config_.AB_CODE['region_rank_by_h'].items()]:
|
|
|
- key_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H}{province_code}."
|
|
|
- elif self.ab_code in [code for _, code in config_.AB_CODE['rank_by_24h'].items()]:
|
|
|
- key_prefix = config_.RECALL_KEY_NAME_PREFIX_BY_24H
|
|
|
- else:
|
|
|
- key_prefix = config_.RECALL_KEY_NAME_PREFIX_BY_H
|
|
|
now_h_recall_key = f"{key_prefix}{self.rule_key}.{now_dt}.{h}"
|
|
|
# if not self.redis_helper.key_exists(key_name=now_h_recall_key):
|
|
|
# 未更新
|
|
@@ -127,7 +129,8 @@ class PoolRecall(object):
|
|
|
self.redis_helper.set_data_to_redis(key_name=h_record_key, value=str(new_record), expire_time=2*3600)
|
|
|
# return h_recall_mid_key
|
|
|
else:
|
|
|
- self.update_mid_data(province_code=province_code)
|
|
|
+ self.update_mid_data(h_recall_mid_key=h_recall_mid_key, h_record_key=h_record_key, key_prefix=key_prefix)
|
|
|
+
|
|
|
# return h_recall_mid_key
|
|
|
|
|
|
return h_recall_mid_key
|
|
@@ -1030,7 +1033,8 @@ class PoolRecall(object):
|
|
|
gevent.spawn(self.region_dup_recall, province_code, 2, size, expire_time)]
|
|
|
else:
|
|
|
t = [gevent.spawn(self.rov_pool_recall_with_region_by_h, province_code, size),
|
|
|
- gevent.spawn(self.region_dup_recall, province_code, 1, size, expire_time),
|
|
|
+ gevent.spawn(self.rov_pool_recall_with_region_by_h, province_code, size, 'region_24h'),
|
|
|
+ # gevent.spawn(self.region_dup_recall, province_code, 1, size, expire_time),
|
|
|
gevent.spawn(self.region_dup_recall, province_code, 2, size, expire_time)]
|
|
|
gevent.joinall(t)
|
|
|
region_recall_result_list = [i.get() for i in t]
|
|
@@ -1064,15 +1068,20 @@ class PoolRecall(object):
|
|
|
|
|
|
return recall_result[:size]
|
|
|
|
|
|
- def rov_pool_recall_with_region_by_h(self, province_code, size=4):
|
|
|
+ def rov_pool_recall_with_region_by_h(self, province_code, size=4, key_flag=''):
|
|
|
"""
|
|
|
地域分组小时级视频召回
|
|
|
:param size: 视频数
|
|
|
:param province_code: 省份code
|
|
|
+ :param key_flag:
|
|
|
:return:
|
|
|
"""
|
|
|
+ if key_flag == 'region_24h':
|
|
|
+ push_from = config_.PUSH_FROM['rov_recall_region_24h']
|
|
|
+ else:
|
|
|
+ push_from = config_.PUSH_FROM['rov_recall_region_h']
|
|
|
# 获取mid对应的小时级列表redis-key
|
|
|
- h_recall_mid_key = self.get_mid_h_key(province_code=province_code)
|
|
|
+ h_recall_mid_key = self.get_mid_h_key(province_code=province_code, key_flag=key_flag)
|
|
|
if not self.redis_helper.key_exists(h_recall_mid_key):
|
|
|
recall_result = []
|
|
|
else:
|
|
@@ -1103,14 +1112,14 @@ class PoolRecall(object):
|
|
|
video_score[video_id] = value[1]
|
|
|
# 过滤
|
|
|
filter_ = FilterVideos(app_type=self.app_type, mid=self.mid, uid=self.uid, video_ids=video_ids)
|
|
|
- ge = gevent.spawn(filter_.filter_videos_h, self.rule_key, self.ab_code, province_code)
|
|
|
+ ge = gevent.spawn(filter_.filter_videos_h, self.rule_key, self.ab_code, province_code, key_flag)
|
|
|
ge.join()
|
|
|
filtered_result = ge.get()
|
|
|
|
|
|
if filtered_result:
|
|
|
# 添加视频源参数 pushFrom, abCode
|
|
|
temp_result = [{'videoId': int(item), 'rovScore': video_score[int(item)],
|
|
|
- 'pushFrom': config_.PUSH_FROM['rov_recall_region_h'], 'abCode': self.ab_code}
|
|
|
+ 'pushFrom': push_from, 'abCode': self.ab_code}
|
|
|
for item in filtered_result if video_score.get(int(item)) is not None]
|
|
|
recall_result.extend(temp_result)
|
|
|
fil_video_ids.extend(list(set(video_ids) - set([item.get('videoId') for item in temp_result])))
|