浏览代码

add get video w_h_rate

liqian 3 年之前
父节点
当前提交
b65ce05b12
共有 4 个文件被更改,包括 57 次插入25 次删除
  1. 13 0
      config.py
  2. 3 15
      db_helper.py
  3. 7 9
      rov_train.py
  4. 34 1
      utils.py

+ 13 - 0
config.py

@@ -62,6 +62,9 @@ class BaseConfig(object):
     # rovScore公差
     ROV_SCORE_D = 0.001
 
+    # width : height > 1 的视频列表 redis key, zset存储,value为videoId,score为w_h_rate
+    W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME = 'com.weiqu.video.w.h.rate.1.item'
+
 
 class DevelopmentConfig(BaseConfig):
     """开发环境配置"""
@@ -195,6 +198,16 @@ class ProductionConfig(BaseConfig):
         'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
     }
 
+    # 生产环境mysql地址
+    MYSQL_INFO = {
+        'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
+        'port': 3306,
+        'user': 'wx2016_longvideo',
+        'password': 'wx2016_longvideoP@assword1234',
+        'db': 'longvideo',
+        'charset': 'utf8'
+    }
+
     # Hologres视频状态存储表名
     VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'
 

+ 3 - 15
db_helper.py

@@ -242,16 +242,11 @@ class HologresHelper(object):
 
 
 class MysqlHelper(object):
-    def __init__(self, mysql_info):
+    def __init__(self):
         """
         初始化mysql连接信息
-        :param mysql_info: mysql连接信息, 格式:dict, {'host': '', 'port': '', 'user':'', 'password': '', 'db': ''}
         """
-        self.host = mysql_info['host']
-        self.port = mysql_info['port']
-        self.user = mysql_info['user']
-        self.password = mysql_info['password']
-        self.db = mysql_info['db']
+        self.mysql_info = config_.MYSQL_INFO
 
     def get_data(self, sql):
         """
@@ -260,14 +255,7 @@ class MysqlHelper(object):
         :return: data
         """
         # 连接数据库
-        conn = pymysql.connect(
-            host=self.host,
-            port=self.port,
-            user=self.user,
-            password=self.password,
-            db=self.db,
-            charset='utf8'
-        )
+        conn = pymysql.connect(**self.mysql_info)
         # 创建游标
         cursor = conn.cursor()
         try:

+ 7 - 9
rov_train.py

@@ -10,7 +10,7 @@ from sklearn.metrics import mean_absolute_error, r2_score, mean_absolute_percent
 
 from config import set_config
 from utils import read_from_pickle, write_to_pickle, data_normalization, \
-    request_post, filter_video_status
+    request_post, filter_video_status, get_video_w_h_rate
 from log import Log
 from db_helper import RedisHelper, MysqlHelper
 
@@ -215,19 +215,17 @@ def predict():
     # else:
     #     log_.error('notify backend fail!')
 
+    # 更新视频的宽高比数据
+    if video_ids:
+        get_video_w_h_rate(video_ids=video_ids)
+        log_.info('update video w_h_rate to redis finished!')
+
 
 def predict_test():
     """测试环境数据生成"""
     # 获取测试环境中最近发布的40000条视频
-    mysql_info = {
-        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
-        'port': 3306,
-        'user': 'wx2016_longvideo',
-        'password': 'wx2016_longvideoP@assword1234',
-        'db': 'longvideo'
-    }
     sql = "SELECT id FROM wx_video ORDER BY id DESC LIMIT 40000;"
-    mysql_helper = MysqlHelper(mysql_info=mysql_info)
+    mysql_helper = MysqlHelper()
     data = mysql_helper.get_data(sql=sql)
     video_ids = [video[0] for video in data]
     # 视频状态过滤

+ 34 - 1
utils.py

@@ -7,7 +7,7 @@ import traceback
 
 from odps import ODPS
 from config import set_config
-from db_helper import HologresHelper
+from db_helper import HologresHelper, MysqlHelper, RedisHelper
 from log import Log
 
 config_ = set_config()
@@ -171,6 +171,39 @@ def filter_video_status(video_ids):
     return filtered_videos
 
 
+def get_video_w_h_rate(video_ids):
+    """
+    获取横屏视频的宽高比,并存入redis中 (width/height>1)
+    :param video_ids: videoId列表 type-list
+    :return: None
+    """
+    # 获取数据
+    if len(video_ids) == 1:
+        sql = "SELECT id, width/height w_h_rate " \
+              "FROM longvideo.wx_video " \
+              "WHERE width/height > 1 " \
+              "AND id IN ({});".format(video_ids[0])
+    else:
+        sql = "SELECT id, width/height w_h_rate " \
+              "FROM longvideo.wx_video " \
+              "WHERE width/height > 1 " \
+              "AND id IN {};".format(tuple(video_ids))
+
+    mysql_helper = MysqlHelper()
+    data = mysql_helper.get_data(sql=sql)
+
+    # 更新到redis
+    info_data = {}
+    for video_id, w_h_rate in data:
+        info_data[int(video_id)] = float(w_h_rate)
+    redis_helper = RedisHelper()
+    # 删除旧数据
+    redis_helper.del_keys(key_name=config_.W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME)
+    # 写入新数据
+    if len(info_data) > 0:
+        redis_helper.add_data_with_zset(key_name=config_.W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME, data=info_data)
+
+
 if __name__ == '__main__':
     # data_test = [9.20273281e+03, 7.00795065e+03, 5.54813112e+03, 9.97402494e-01, 9.96402495e-01, 9.96402494e-01]
     # data_normalization(data_test)