Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 调用函数的工作进程不';t打印_Julia - Fatal编程技术网

Julia 调用函数的工作进程不';t打印

Julia 调用函数的工作进程不';t打印,julia,Julia,我正试图在Julia中调试一个并行程序,希望看到其工作人员的打印输出,但他们似乎无法打印。我怎样才能“修复”这个 我的测试代码是: function Test() print("Worker ",myid()) end for i in workers() @spawnat i Test() end 没有在远程工作者上定义函数Test,您没有使用fetch,因此它会自动失败。使用myid()还需要在远程工作者处加载Distributed。最后但并非最不重要的一点是,远程工作者的标准输

我正试图在Julia中调试一个并行程序,希望看到其工作人员的打印输出,但他们似乎无法打印。我怎样才能“修复”这个

我的测试代码是:

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
在这里破坏了并行代码的所有好处(在这种情况下,这当然无关紧要,但如果实际函数做了一些工作,它就会)。