2016-07-28 33 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解決了。

相關問題