如何加快Julia脚本启动速度?基于v1.8.3的预编译优化需求
Julia脚本启动加速方案(适配1.8.3版本)
你的需求完全可行,针对Julia脚本首次启动编译耗时久的问题,结合你提到的预编译常用包的需求,给你几个实用方案:
用PackageCompiler生成系统镜像
这是最直接解决预编译问题的方法,能把UnicodePlots、CSV、DataFrames这些依赖包,甚至你的脚本逻辑一起编译成系统镜像,后续运行直接加载镜像跳过编译环节。
步骤如下:- 先安装PackageCompiler包:
using Pkg; Pkg.add("PackageCompiler") - 写一个生成镜像的脚本(比如叫
build_sysimage.jl):using PackageCompiler # 把需要预编译的包列出来,同时指定你的脚本作为预编译执行文件,让镜像包含脚本逻辑的编译缓存 create_sysimage(["UnicodePlots", "CSV", "DataFrames"], sysimage_path="my_data_plot.so", precompile_execution_file="foo.jl") - 运行这个脚本生成镜像:
julia build_sysimage.jl - 之后启动你的脚本时指定镜像:
julia --sysimage my_data_plot.so foo.jl a.csv b.csv
这样二次及后续运行就能跳过大部分编译步骤,启动时间能压缩到3秒左右,完全符合你的需求。
- 先安装PackageCompiler包:
利用Julia原生预编译缓存
Julia本身会自动缓存已安装包的预编译结果,首次运行后,只要包版本没更新,后续启动时包的加载速度会快一些。但如果你的脚本里有自定义的逻辑代码,这部分还是会在首次运行时编译,所以这个方法适合配合系统镜像一起用,或者脚本逻辑非常简单的场景。打包成独立可执行文件
如果不想每次启动都指定系统镜像,可以用PackageCompiler把脚本和所有依赖打包成独立可执行文件,运行时直接执行即可,不需要手动启动Julia解释器:using PackageCompiler create_app("foo.jl", "foo_plot_app", precompile_execution_file="foo.jl")生成后,直接运行
./foo_plot_app/a.csv b.csv(Linux/macOS)或者Windows下对应的exe文件,启动速度会更快,而且可以在没有安装Julia的环境里运行。
需要注意的是,以上方案在Julia 1.8.3版本中都能正常工作,其中系统镜像方案最贴合你“将常用包设置为默认预编译”的需求,能精准把启动耗时降到目标范围。
内容的提问来源于stack exchange,提问作者Daniel YC Lin
相关产品推荐
相关产品推荐

