Julia 调用函数的工作进程不';t打印
我正试图在Julia中调试一个并行程序,希望看到其工作人员的打印输出,但他们似乎无法打印。我怎样才能“修复”这个 我的测试代码是:Julia 调用函数的工作进程不';t打印,julia,Julia,我正试图在Julia中调试一个并行程序,希望看到其工作人员的打印输出,但他们似乎无法打印。我怎样才能“修复”这个 我的测试代码是: function Test() print("Worker ",myid()) end for i in workers() @spawnat i Test() end 没有在远程工作者上定义函数Test,您没有使用fetch,因此它会自动失败。使用myid()还需要在远程工作者处加载Distributed。最后但并非最不重要的一点是,远程工作者的标准输
function Test()
print("Worker ",myid())
end
for i in workers()
@spawnat i Test()
end
没有在远程工作者上定义函数
Test
,您没有使用fetch
,因此它会自动失败。使用myid()
还需要在远程工作者处加载Distributed
。最后但并非最不重要的一点是,远程工作者的标准输出缓存在行级别,因此您需要使用println
而不是print
以下是正确的代码:
using Distributed
@everywhere Distributed
@everywhere function Test()
println("Worker ",myid())
end
for i in workers()
fetch(@spawnat i Test())
end
下面是Bogumil的注释-fetch
,这样您的代码不会因为其他原因而自动失败。您需要使用@async和@sync宏来收集数据:
jobs = Dict{Int,Future}()
@sync for i in workers()
@async jobs[i] = @spawnat i Test()
end
@sync for i in workers()
@async fetch(jobs[i])
end
没有在远程工作者上定义函数
Test
,您没有使用fetch
,因此它会自动失败。使用myid()
还需要在远程工作者处加载Distributed
。最后但并非最不重要的一点是,远程工作者的标准输出缓存在行级别,因此您需要使用println
而不是print
以下是正确的代码:
using Distributed
@everywhere Distributed
@everywhere function Test()
println("Worker ",myid())
end
for i in workers()
fetch(@spawnat i Test())
end
下面是Bogumil的注释-fetch
,这样您的代码不会因为其他原因而自动失败。您需要使用@async和@sync宏来收集数据:
jobs = Dict{Int,Future}()
@sync for i in workers()
@async jobs[i] = @spawnat i Test()
end
@sync for i in workers()
@async fetch(jobs[i])
end
如果您将函数重命名为
mytest
,那么它对您有效吗?如果您将函数重命名为mytest
,那么它对您有效吗?在for循环前面添加@sync
而不是fetch
,可能更有意义,因为这里的fetch
破坏了并行代码的所有好处(在这种情况下,这当然无关紧要,但如果实际函数做了一些工作,它就会做)。可能在for循环前面添加@sync
,而不是fetch
,这更有意义,因为fetch
在这里破坏了并行代码的所有好处(在这种情况下,这当然无关紧要,但如果实际函数做了一些工作,它就会)。