我已经开始使用ParallelDataTransfer.jl库(https://github.com/ChrisRackauckas/ParallelDataTransfer.jl),它基于Julia: How to copy data to another processor in Julia中给出的解决方案,并且我遇到了几个问题,列在了如下:
1-如何使用自己的局部变量对worker进行计算?例如,让我们定义" x = pi"在进程2中使用" sendto(2,x = pi)",现在如何执行函数" sin(x)"在过程2中,将结果放在变量" y"哪个也住在过程2? (注意,当运行" @spawnat 2 y = sin(x)时,变量" y"不会出现在进程2的范围内,可以通过运行&#34来访问; @spawnat 2 whos()")
2-在第一个问题之后,是否有可能工人(比如说i)使用工人j自己的局部变量请求在另一个工人(比如说j)上执行一个函数,然后获取结果工人我?例如,在上面的例子中,如何处理3请求进程2来计算" sin(x)"在哪里" x"生活在过程2中,然后将结果发送到变量" z"谁住在过程3?
答案 0 :(得分:0)
根据Keegan Lensink在Julia频道的建议,这些工作可以按如下方式进行:
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个模块中将y
分配给z
@spawnat 3 eval(Main, :(z = eval(:(@fetchfrom 2 eval(Main, :(y = sin(x)))))))
@fetchfrom 3 z