Julia PMAP:如何有效地向其他工人发送辅助功能



使用pmap函数时,如果未在任何工作过程中定义该函数,则会发生错误。但是,当功能调用其他函数或在另一个.jl文件中使用其他功能时,在每个相关功能上使用@everywhere宏当然不是一个好的解决方案。

是否有一种整洁的方法可以有效地将功能与其帮助者一起发送给所有可用的工人?

我认为没有一个可与函数定义一起使用的宏来将其所有助手功能的定义发送到所有工作过程中。

但是,有更好的方法来发送所需的所有功能,而不是将@everywhere放在每个功能之前。

您可以将所有这些功能放在文件中,并使用@everywhere include("mynewfile.jl")到处的include。如果您的功能在另一个.jl文件中使用其他函数,请在mynewfile.jl中的另一个文件中放置该 include语句。如果您使用其他文件中的模块,请将usingimport语句放入mynewfile.jl

以类似的方式,您可以使用@everywhere begin...end块。将所有这些功能(将usingimport语句,include S等都放在begin...end块中,并在begin之前放置@everywhere。如果您正在使用Ijulia笔记本,这将特别有用。

julia> @everywhere begin
           g(x) = x^2
           f(x) = g(x)*2
       end
julia> pmap(f, 1:5)
5-element Array{Int64,1}:
  2
  8
 18
 32
 50

您还可以创建模块/软件包,只需使用一个@eveywhere using MyNewModule即可。如果您在软件包外使用模块,则还应包括该模块的定义/文件。

您可能会发现阅读相关的手动输入很有用。

最新更新