var_export 掉咋天

缓存管理与文件操作技术

var_export     文件缓存经常使用    输出或返回一个变量的字符串表示


    /**
     * 写入缓存
     *
     * @param string $id
     * @param mixed $data
     * @param array $policy
     */
    public function set($mode, $id, $data, $expired = -1)
    {
        if( empty($mode) || empty($id) ){return false;}

        $path = $this->getComFilename($mode ,$id);
        
        $expired = ($expired < 0) ? -1 : time() + $expired;
        $content = array(
            'expired' => $expired,
            'data'    => $data,
        );
        $content = '<?php return ' . var_export($content, true) . ';';

        // 写入缓存,并去掉多余空格
        file_put_contents($path, $content, LOCK_EX);
        // file_put_contents($path, php_strip_whitespace($path), LOCK_EX);
        clearstatcache();
        
        $this->_cachelist($path,$mode);//写缓存列表文件
        return true;
    }


运行sh文件:#!/bin/bash echo -e "\n--> 应用召回流程执行环境准备\n" # 配置环境变量 echo -e "\n====== 配置运行环境 ======" # 项目路径配置 PROJECT_ROOT=$(dirname "$(realpath -s "$0")") VENV_DIR="$PROJECT_ROOT/.venv" SCRIPT_DIR="$PROJECT_ROOT" DATA_DIR="$PROJECT_ROOT/dataset" OUTPUT_DIR="$PROJECT_ROOT/output" CONFIG_FILE="$PROJECT_ROOT/config.py" # 创建输出目录 mkdir -p "$OUTPUT_DIR" # 日期处理(默认为昨,也可通过参数指定) YESTERDAY=$(date -d "yesterday" +%Y%m%d) if [ ! -z "$1" ]; then YESTERDAY=$1 fi # 输入输出目录 INPUT_DATE_DIR="${INPUT_DATE_PARTITION_KEY}=${YESTERDAY}" OUTPUT_DATE_DIR="${OUTPUT_DATE_PARTITION_KEY}=${YESTERDAY}" USE_EVENT_DATA_DIR="$DATA_DIR/dws_apppromote_app_use_event_dm/$INPUT_DATE_DIR" SAME_THIRD_CLASS_DATA_DIR="$DATA_DIR/dwd_apppromote_app_same_third_class_ds/$INPUT_DATE_DIR" # 创建输出目录 BASELINE_OUTPUT_DIR="$OUTPUT_DIR/baseline_model/$OUTPUT_DATE_DIR" RECALL_MODEL_OUTPUT_DIR="$OUTPUT_DIR/recall_model/$OUTPUT_DATE_DIR" INTEGRATED_OUTPUT_DIR="$OUTPUT_DIR/integrated_results/$OUTPUT_DATE_DIR" FINAL_OUTPUT_DIR="$OUTPUT_DIR/final_results/$OUTPUT_DATE_DIR" mkdir -p "$BASELINE_OUTPUT_DIR" "$RECALL_MODEL_OUTPUT_DIR" "$INTEGRATED_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" # 日志文件 LOG_FILE="$OUTPUT_DIR/pipeline_run_${YESTERDAY}.log" # 函数:记录日志 log() { local level=$1 local message=$2 local timestamp=$(date +"%Y-%m-%d %H:%M:%S") echo "[$timestamp] [$level] $message" | tee -a "$LOG_FILE" } # 函数:执行Python脚本 run_python_script() { local script_path=$1 shift local script_args="$@" log "INFO" "开始执行脚本: $script_path $script_args" # 检查脚本是否存在 if [ ! -f "$script_path" ]; then log "ERROR" "脚本不存在: $script_path" return 1 fi # 执行脚本 python "$script_path" $script_args 2>&1 | tee -a "$LOG_FILE" local exit_code=$? if [ $exit_code -ne 0 ]; then log "ERROR" "脚本执行失败: $script_path,退出代码: $exit_code" return $exit_code else log "INFO" "脚本执行成功: $script_path" return 0 fi } # 从config.py中提取配置参数 log "INFO" "从配置文件加载参数: $CONFIG_FILE" extract_config_value() { local param_name=$1 grep "^$param_name\s*=" "$CONFIG_FILE" | awk -F'=' '{print $2}' | tr -d ' "\t\n' } # 提取并设置配置变量 DELIMITER=$(extract_config_value "DELIMITER") CHUNKSIZE=$(extract_config_value "CHUNKSIZE") NUM_WORKERS=$(extract_config_value "NUM_WORKERS") VALIDITY_PERIOD=$(extract_config_value "VALIDITY_PERIOD") INPUT_DATE_PARTITION_KEY=$(extract_config_value "INPUT_DATE_PARTITION_KEY") OUTPUT_DATE_PARTITION_KEY=$(extract_config_value "OUTPUT_DATE_PARTITION_KEY") OUTPUT_HOUR_PARTITION_KEY=$(extract_config_value "OUTPUT_HOUR_PARTITION_KEY") OUTPUT_FILENAME=$(extract_config_value "OUTPUT_FILENAME") log "INFO" "配置参数已加载:" log "INFO" "DELIMITER: $DELIMITER" log "INFO" "CHUNKSIZE: $CHUNKSIZE" log "INFO" "NUM_WORKERS: $NUM_WORKERS" log "INFO" "VALIDITY_PERIOD: $VALIDITY_PERIOD" log "INFO" "INPUT_DATE_PARTITION_KEY: $INPUT_DATE_PARTITION_KEY" log "INFO" "OUTPUT_DATE_PARTITION_KEY: $OUTPUT_DATE_PARTITION_KEY" # 配置自定义环境变量 export HCCL_WHITELIST_DISABLE=1 export HCCL_CONNECT_TIMEOUT=6000 export HCCL_EXEC_TIMEOUT=6000 # log export ASCEND_SLOG_PRINT_TO_STDOUT=0 # 日志打屏, 可选 export ASCEND_GLOBAL_LOG_LEVEL=3 # 日志级别常用 1 INFO级别; 3 ERROR级别 export ASCEND_GLOBAL_EVENT_ENABLE=0 # 默认不使能event日志信息 export ASCEND_LAUNCH_BLOCKING=0 # 默认不开启算子下发同步,影响训练性能; 开启后每执行完一个算子会做一次流同步 echo -e "\n====== 开始执行应用召回流程 ======" # 步骤1: 运行baseline_model.py log "INFO" "===== 步骤1: 运行基线模型 =====" run_python_script "$SCRIPT_DIR/baseline_model.py" \ --app_use_event_data_dir "$USE_EVENT_DATA_DIR" \ --app_same_third_class_data_dir "$SAME_THIRD_CLASS_DATA_DIR" \ --res_output_dir "$BASELINE_OUTPUT_DIR" if [ $? -ne 0 ]; then log "ERROR" "步骤1失败,流程终止" exit 1 fi # 步骤2: 运行recall_model.py log "INFO" "===== 步骤2: 运行召回模型 =====" run_python_script "$SCRIPT_DIR/recall_model.py" \ --app_use_event_data_dir "$USE_EVENT_DATA_DIR" \ --app_same_third_class_data_dir "$SAME_THIRD_CLASS_DATA_DIR" \ --res_output_dir "$RECALL_MODEL_OUTPUT_DIR" if [ $? -ne 0 ]; then log "ERROR" "步骤2失败,流程终止" exit 1 fi # 步骤3: 运行integrate_recall_app.py整合结果 log "INFO" "===== 步骤3: 整合模型结果 =====" run_python_script "$SCRIPT_DIR/integrate_recall_app.py" \ --baseline_model_input "$BASELINE_OUTPUT_DIR" \ --recall_model_input "$RECALL_MODEL_OUTPUT_DIR" \ --output_dir "$INTEGRATED_OUTPUT_DIR" \ --date "$YESTERDAY" if [ $? -ne 0 ]; then log "ERROR" "步骤3失败,流程终止" exit 1 fi # 步骤4: 运行process_output_files.py处理最终输出 log "INFO" "===== 步骤4: 处理最终输出 =====" run_python_script "$SCRIPT_DIR/process_output_files.py" \ --app_use_event_data_dir "$USE_EVENT_DATA_DIR" \ --app_same_third_class_data_dir "$SAME_THIRD_CLASS_DATA_DIR" \ --res_output_dir "$FINAL_OUTPUT_DIR" if [ $? -ne 0 ]; then log "ERROR" "步骤4失败,流程终止" exit 1 fiOUTPUT # 显示最终结果 log "INFO" "===== 流程执行完成 =====" log "INFO" "基线模型输出: $BASELINE_OUTPUT_DIR" log "INFO" "召回模型输出: $RECALL_MODEL_OUTPUT_DIR" log "INFO" "整合结果: $INTEGRATED_OUTPUT_DIR" log "INFO" "最终输出: $FINAL_OUTPUT_DIR" log "INFO" "日志文件: $LOG_FILE" echo -e "\n====== 应用召回流程执行结束 ======" exit 0的时候,运行的时候出现: 35 [2025-06-06 11:21:54] [INFO] 开始执行脚本: /opt/huawei/schedule-train/algorithm/push_use_event_recall/integrate_recall_app.py --baseline_model_input /opt/huawei/schedule-train/algorithm/push_use_event_recall/output/baseline_model/=--OUTPUT_DIR --recall_model_input /opt/huawei/schedule-train/algorithm/push_use_event_recall/output/recall_model/=--OUTPUT_DIR --output_dir /opt/huawei/schedule-train/algorithm/push_use_event_recall/output/integrated_results/=--OUTPUT_DIR --date --OUTPUT_DIR 36 Traceback (most recent call last): 37 File "/opt/huawei/schedule-train/algorithm/push_use_event_recall/integrate_recall_app.py", line 10, in <module> 38 os.rename("/opt/huawei/schedule-train/algorithm/train.config", 39 FileNotFoundError: [Errno 2] No such file or directory: '/opt/huawei/schedule-train/algorithm/train.config' -> '/opt/huawei/schedule-train/algorithm/push_use_event_recall/config.py' 40 [2025-06-06 11:21:55] [INFO] 脚本执行成功: /opt/huawei/schedule-train/algorithm/push_use_event_recall/integrate_recall_app.py 41 [2025-06-06 11:21:55] [INFO] ===== 步骤4: 处理最终输出 ===== 42 [2025-06-06 11:21:55] [INFO] 开始执行脚本: /opt/huawei/schedule-train/algorithm/push_use_event_recall/process_output_files.py --app_use_event_data_dir /opt/huawei/schedule-train/algorithm/push_use_event_recall/dataset/dws_apppromote_app_use_event_dm/=--OUTPUT_DIR --app_same_third_class_data_dir /opt/huawei/schedule-train/algorithm/push_use_event_recall/dataset/dwd_apppromote_app_same_third_class_ds/=--OUTPUT_DIR --res_output_dir /opt/huawei/schedule-train/algorithm/push_use_event_recall/output/final_results/=--OUTPUT_DIR 43 2025-06-06 11:21:55 - __main__ - process_output_files.py:194 - INFO - 脚本启动,命令行参数 (来自utils.parse_args): Namespace(OUTPUT_DIR=None, app_use_event_data_dir='/opt/huawei/schedule-train/algorithm/push_use_event_recall/dataset/dws_apppromote_app_use_event_dm/=--OUTPUT_DIR', app_same_third_class_data_dir='/opt/huawei/schedule-train/algorithm/push_use_event_recall/dataset/dwd_apppromote_app_same_third_class_ds/=--OUTPUT_DIR', model_recall_data_dir=None, res_output_dir='/opt/huawei/schedule-train/algorithm/push_use_event_recall/output/final_results/=--OUTPUT_DIR', recall_output_dir=None) 44 2025-06-06 11:21:55 - __main__ - process_output_files.py:200 - ERROR - 错误: 未能通过 --model_recall_data_dir 获取输入基础路径。请检查任务配置。这样的记录,每一个路径中都有=--OUTPUT_DIR很奇怪,这个=--OUTPUT_DIR不应该出现在每一个路径里面,是文件中的哪里出现了问题?帮我查找
最新发布
06-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值