我无法理解如何使用工作进程和模块。我会尽量简单地解释我的困难。Julia - 模块和并行性
我对我的主要过程(过程1)有一个模块,module A
。
在工作进程上,我有module B
,它应该处理许多复杂的计算(对于并行工作者通常是这种情况)。
的问题是,它好像需要对工人定义module A
...
的问题是,module A
比module B
大得多,它包含数千行代码,但只module B
用途大约15个短的功能。
有任何解决方法,所以我可以让我的主要工作人员必须module A
访问,但工人进入module B
但能够从方法module A
叫工人,并让他们运行在他们的module B
定义的函数?例如,module B
中可能有一个方法,称为calculate_stuff()
。
我希望达到的结构是这样的:
module A # main worker process using this module
function call_worker_and_calculate()
remotecall_fetch(calculate_stuff, 2)
end
export call_worker_and_calculate
end
module B # worker process 2 is using this module
function calculate_stuff()
# some stuff
end
export calculate_stuff
end
这个特殊的例子将返回错误信息:
julia> A.call_worker_and_calculate()
ERROR: On worker 2:
UndefVarError: A not defined
您可以将'A'中的函数改为接受函数ex ecute作为参数,例如'call_worker_and_calculate(f)= remotecall_fetch(f,2)',并且调用类似于'A.call_worker_and_calculate(B.calculate_stuff)'。无论如何,'B'必须在路径中或者使用'@ everywhere'定义在每个工人身上。 – tim