如何在Bash循环任务中缓存main.py避免代码修改影响后续实验
解决实验代码缓存问题的几种方法
针对你遇到的「实验队列中后续任务会读取修改后的main.py」问题,可以通过以下几种方式缓存代码,确保所有实验都使用脚本启动时的代码版本:
方法一:复制代码到临时目录执行
这是最直观的方案,先将当前版本的main.py复制到独立的临时目录,后续所有实验都调用这个副本,完全隔离原文件的修改。
# 创建安全的临时目录 TEMP_DIR=$(mktemp -d) # 复制当前main.py到临时目录 cp main.py "$TEMP_DIR/" # 循环执行所有实验,使用缓存的代码副本 for SIZE in 1 2 4 8 16; do python "$TEMP_DIR/main.py" $SIZE done # 实验完成后可删除临时目录(若需保留副本可注释此行) rm -r "$TEMP_DIR"
方法二:预编译为字节码执行
Python会将.py文件编译为字节码(.pyc),我们可以提前编译好当前版本的代码,后续直接运行字节码文件,避免读取修改后的原文件。注意字节码与Python版本强相关,不同版本生成的字节码无法通用。
# 预编译main.py生成字节码 python -m py_compile main.py # 获取生成的字节码文件路径(适配不同Python版本的命名) PYC_FILE=$(find __pycache__ -name "main.*.pyc") # 循环执行字节码文件 for SIZE in 1 2 4 8 16; do python "$PYC_FILE" $SIZE done
方法三:打包代码后解压执行
如果你的实验依赖多个文件(比如utils.py、配置文件等),可以将整个代码目录打包,在临时目录解压后执行,确保所有依赖文件都被缓存。
# 打包当前目录下的所有实验代码(按需调整打包文件列表) tar -czf code_cache.tar.gz main.py # 创建临时目录 TEMP_DIR=$(mktemp -d) # 解压缓存包到临时目录 tar -xzf code_cache.tar.gz -C "$TEMP_DIR" # 循环执行实验 for SIZE in 1 2 4 8 16; do # 切换到临时目录执行,避免路径问题 cd "$TEMP_DIR" && python main.py $SIZE && cd - > /dev/null done # 清理打包文件和临时目录 rm code_cache.tar.gz rm -r "$TEMP_DIR"
内容的提问来源于stack exchange,提问作者CNDominic
相关产品推荐
相关产品推荐

