如何实现在多进程中调用 m 兼容和自定义的 m 函数
技术分享
发布于 2025-07-10 10:35:55
查看 1过去327天
使用 @everywhere 将所有进程共用的表达式广播出去,确保每一个进程都可以打开 m兼容、可以加载 mlang 函数库、可以找到自定义 m 函数路径。
示例如下:
1.创建自定义 m 函数 Main_t,写入下面代码:
function time = Main_t(a,b)
time = a*b
disp(['start=',num2str(a),'finish=',num2str(b)])
end

2.编写多进程代码,如下,其中的路径需要替换成自定义 m 函数 Main_t 所在的路径:
using Distributed
#每一个进程都要 using TyMLangCore
@everywhere using TyMLangCore
#加载 mlang 函数库,num2str 函数是 mlang 函数库里的,不是内需函数
@everywhere TyMLangCore.load_PreloadMPackages
#每一个进程都要把 m 函数路径加进去
@everywhere TyMLangCore.eval_mcode!("addpath('/home/wangerjia/Syslab/case')") #自定义 m 函数 Main_t 路径
@sync @distributed for i in 1:4
println("循环 i=$i 在进程 $(myid())上执行")
start =TyMLangCore.to_mlang(float(i));
fnish =TyMLangCore.to_mlang(float(i));
mv =TyMLangCore.mexCallMLang("Main_t",1,[start,fnish])
time = TyMLangCore.from_mlang(mv[1])
println(time);
println("end");
end
3.运行上述代码,可以看到成功实现了在多进程中调用 m 兼容和自定义 m 函数:

所属专栏:Julia语言
产品信息:Syslab科学计算环境