将计算值保存在同一个worker中的worker中,以及worker之间的任务请求

Saving the computed value in a worker within the same worker and task requesting between workers

我已经开始使用 ParallelDataTransfer.jl 库(https://github.com/ChrisRackauckas/ParallelDataTransfer.jl) which is based on the solution given in Julia: How to copy data to another processor in Julia 我遇到了几个问题,如下所列:

1-如何使用自己的局部变量对工人执行计算?例如,让我们使用 "sendto(2,x=pi)" 在进程 2 上定义 "x=pi",现在如何在进程 2 上执行函数 "sin(x)" 并将结果放入也存在于进程中的变量 "y" 2? (注意当 运行 "@spawnat 2 y=sin(x) 时,变量 "y" 没有出现在进程 2 的范围内,进程 2 可以被 运行 "@spawnat 2 谁()")

2-在第一个问题之后,是否有可能一个工人(比如我)请求一个函数在另一个工人(比如j)上执行,使用工人j自己的局部变量,然后在工人i上获取结果?例如在上面的例子中,进程 3 如何请求进程 2 计算 "sin(x)",其中 "x" 存在于进程 2 中,然后将结果发送到进程 3 中的变量 "z"?

根据 Keegan Lensink 在 Julia Channel 中的建议,这些工作可以做如下:

1-

在进程 2 上定义 x

sendto(2, x = pi)

计算 2 上的表达式,并将结果存储在 Main

@fetchfrom 2 eval(Main, :(y = sin(x)))

通过询问 y

检查它是否有效

@fetchfrom 2 y

2-

进程 3 要求 2 评估 y = sin(x),然后在 3 的模块 Main

中将 y 分配给 z

@spawnat 3 eval(Main, :(z = eval(:(@fetchfrom 2 eval(Main, :(y = sin(x)))))))

@fetchfrom 3 z