【发布时间】:2016-11-28 13:18:03
【问题描述】:
我无法理解如何将工作进程与模块一起使用。我将尝试简单地解释我的困难。
我的主进程(进程 1)上有一个模块,module A。
在工作进程上,我有module B,它应该处理大量复杂的计算(并行工作人员通常是这种情况)。
问题在于,似乎需要在工人身上定义module A...
问题在于module A 比module B 大得多,它包含数千行代码,但module B 只使用了大约15 个短函数。
是否有任何解决方法,所以我可以让我的主要工作人员可以访问module A,但工作人员可以访问module B,但能够从module A 中的方法调用工作人员,并让他们运行在他们的@ 中定义的函数987654330@?例如,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中的函数更改为接受要作为参数执行的函数,例如call_worker_and_calculate(f) = remotecall_fetch(f, 2)并像A.call_worker_and_calculate(B.calculate_stuff)一样调用 ist。在任何情况下,B必须在路径中或使用@everywhere在每个工作人员上定义。