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
注:我有大量的系統內存,即使對於大型對象的兩個副本,所以問題不在於此。