1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import random
- import time
- import multiprocessing
- from datetime import date, timedelta
- from log import Log
- from db_helper import RedisHelper
- from config import set_config
- from utils import FilterVideos, get_videos_remain_view_count
- log_ = Log()
- config_ = set_config()
- def video_recommend(mid, uid, size, app_type, algo_type):
- """
- 首页线上推荐逻辑
- :param mid: mid type-string
- :param uid: uid type-string
- :param size: 请求视频数量 type-int
- :param app_type: 产品标识 type-int
- :param algo_type: 算法类型 type-string
- :return:
- """
- # 多进程召回
- start_recall = time.time()
- cores = multiprocessing.cpu_count()
- pool = multiprocessing.Pool(processes=cores)
- pool_recall = PoolRecall(app_type=app_type, mid=mid, uid=uid)
- pool_list = [
- # rov召回池
- pool.apply_async(pool_recall.rov_pool_recall, size),
- # 流量池
- pool.apply_async(pool_recall.flow_pool_recall, size)
- ]
- recall_result_list = [p.get() for p in pool_list]
- pool.close()
- pool.join()
- end_recall = time.time()
- log_.info('mid: {}, uid: {}, recall: {}, execute time = {}ms'.format(
- mid, uid, recall_result_list, (end_recall - start_recall) * 1000))
- # 排序
- data = {
- 'rov_pool_recall': recall_result_list[0],
- 'flow_pool_recall': recall_result_list[1]
- }
- # 1. 从ROV召回池中获取 size 个视频, 过滤
- # 2. 从流量池中获取 size-K 个视频,过滤,剩余可分发数 > 0
- # 3. 排序,topK 召回池视频,size-K 按概率 P 从流量池中获取视频
- pass
|