Io 如何在Julia分布式for循环中以非交互方式运行I/O?

Io 如何在Julia分布式for循环中以非交互方式运行I/O?,io,julia,distributed,Io,Julia,Distributed,使用foo.jl中的以下代码: using Distributed @distributed for k = 1:4 println("Creating file ", k) write(string("file_", k), "foo") end 在REPL中执行include(“foo.jl”)将打印预期的行并创建预期的文件,但当我走出REPL并运行 julia foo.jl 不写入任何内容,也不创建任何文件 为什么会有差异?脚本在REPL之外按预期运行需要什么?@di

使用
foo.jl
中的以下代码:

using Distributed

@distributed for k = 1:4
    println("Creating file ", k)
    write(string("file_", k), "foo")
end
在REPL中执行
include(“foo.jl”)
将打印预期的行并创建预期的文件,但当我走出REPL并运行

julia foo.jl
不写入任何内容,也不创建任何文件


为什么会有差异?脚本在REPL之外按预期运行需要什么?

@distributed
没有阻塞,因此Julia进程在写入任何文件之前完成。试一试

using Distributed

@sync @distributed for k = 1:4
    println("Creating file ", k)
    write(string("file_", k), "foo")
end
using Distributed

@sync @distributed for k = 1:4
    println("Creating file ", k)
    write(string("file_", k), "foo")
end
相反。

如中所述:

请注意,如果没有reducer函数,@distributed将异步执行,也就是说,它会在所有可用的辅助进程上生成独立任务,并立即返回,而无需等待完成。要等待完成,请在呼叫前加上
@sync

在您的情况下(不使用reducer函数):
@distributed
生成任务并立即返回。您的任务非常短,以至于在REPL中几乎可以立即看到它们,并且没有注意到同步进程的区别(除了输出可能与REPL提示符混合)

但是,在脚本中,julia主进程在生成任务后立即终止,而没有任何实际运行任务的机会。你看不到结果

按照文档中的建议,使用
@sync
等待任务完成,然后再执行以下操作: