朱莉娅pmap:如何有效地将辅助功能发送给其他工作人员?

时间:2019-03-08 06:16:11

标签: parallel-processing julia

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

是否有一种有效的方法可以将功能及其助手有效地发送给所有可用的工人?

1 个答案:

答案 0 :(得分:3)

我认为没有一个宏可以与函数定义一起使用,以将其所有辅助函数的定义发送给所有辅助进程。

但是,有比发送@everywhere更好的方法来发送所需的所有功能。

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

以类似的方式,您可以使用@everywhere begin...end块代替文件。将所有这些功能,usingimport语句,include等放入begin...end块中,并将@everywhere放在begin之前。如果您使用的是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。如果您在包装之外使用模块,则还应该在所有位置都包含该模块的定义/文件。

您可能会发现阅读the relevant manual entry.

非常有用