Io Julia worker在使用println时生成断管异常

Io Julia worker在使用println时生成断管异常,io,parallel-processing,julia,Io,Parallel Processing,Julia,我已经使用自定义ClusterManager在一个单独的节点上启动了许多Julia workers。标准TCP/IP传输 我可以对工作程序运行remotecall,但当我要求远程工作程序使用println时,它会失败,出现管道中断异常 知道为什么会发生这种情况吗 julia> remotecall_fetch(90, gethostname) "gpu-8.local" julia> remotecall_fetch(90, println, "test") ERROR: On w

我已经使用自定义ClusterManager在一个单独的节点上启动了许多Julia workers。标准TCP/IP传输

我可以对工作程序运行remotecall,但当我要求远程工作程序使用
println
时,它会失败,出现管道中断异常

知道为什么会发生这种情况吗

julia> remotecall_fetch(90, gethostname)
"gpu-8.local"

julia> remotecall_fetch(90, println, "test")
ERROR: On worker 90:
write: broken pipe (EPIPE)
 in yieldto at ./task.jl:71
 in wait at ./task.jl:371
 in stream_wait at ./stream.jl:60
 in uv_write at stream.jl:962
 in buffer_or_write at stream.jl:972
 in write at stream.jl:1011
 in print at strings/io.jl:46
 in print at strings/io.jl:18
 in println at strings/io.jl:25
 in println at strings/io.jl:28
 in anonymous at multi.jl:923
 in run_work_thunk at multi.jl:661
 [inlined code] from multi.jl:923
 in anonymous at task.jl:63
 in remotecall_fetch at multi.jl:747
 in remotecall_fetch at multi.jl:750

在又流了几个小时的汗和泪后,我回答了自己的问题。我误解了文件的一个细节。群集管理器必须维护标准输出IO流,并将其传递到WorkerConfig.IO字段

我注意到文档中有这样一行:

  • 集群管理器捕获每个工作进程的标准输出,并将其提供给主进程
我最初认为这意味着只有在工作人员将其IP/端口写入stdout的初始握手过程中,主节点才需要捕获它来启动会话。但是现在我看到集群管理器需要不断地将stdout从worker重定向到master