2016-07-28 61 views
0

我试图将数据从主进程发送到工作进程。对于相对较小的数据,我能够做到这一点。但是,一旦他们超过一定的大小,我会遇到序列化错误。Julia:向工作人员发送大型对象时发生序列化错误

有没有办法解决这个问题,还是我只需要将我的对象拆分成小块,然后在工人上重新组装呢?如果是这样,是否有一种很好的方法可以提前确定我可以发送的最大大小(我认为这可能取决于系统变量)?下面的代码显示了一个有效的传输和一个失败的传输。有可能需要修改尺寸以便在其他系统上重现。

function sendto(p::Int; args...) 
    for (nm, val) in args 
     @spawnat(p, eval(Main, Expr(:(=), nm, val))) 
    end 
end 

X1 = rand(10^5, 10^3); 
X2 = rand(10^6, 10^3); 

sendto(2, X1 = X1) ## works fine 

sendto(2, X2 = X2) 
ERROR: write: invalid argument (EINVAL) 
in yieldto at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib 
in wait at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib 
in stream_wait at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib 
in uv_write at stream.jl:962 
in buffer_or_write at stream.jl:982 
in write at stream.jl:1011 
in serialize_array_data at serialize.jl:164 
in serialize at serialize.jl:181 
in serialize at serialize.jl:127 
in serialize at serialize.jl:310 
in serialize_any at serialize.jl:422 
in send_msg_ at multi.jl:222 
in remotecall at multi.jl:726 
in sendto at none:3 

注:我有大量的系统内存,即使对于大型对象的两个副本,所以问题不在于此。

回答

0

这个问题似乎现在用Julia 0.5解决了。

相关问题