The above code wasn't using the HDF5-based JLD package/format, it was just using .jld as a file extension to store the results of serialize(). Should probably use some different extension for that, .jls or something, to avoid confusion.
On Monday, August 10, 2015 at 12:45:35 PM UTC-7, Stefan Karpinski wrote: > > JLD doesn't support serializing functions but Julia itself does. > > On Mon, Aug 10, 2015 at 3:43 PM, Andrei Zh <faithle...@gmail.com > <javascript:>> wrote: > >> I'm afraid it's not quite true, and I found simple way to show it. In the >> next code snippet I define function `f` and serialize it to a file: >> >> julia> f(x) = x + 1 >> f (generic function with 1 method) >> >> julia> f(5) >> 6 >> >> julia> open("example.jld", "w") do io serialize(io, f) end >> >> >> Then I close Julia REPL and in a new session try to load and use this >> function: >> >> julia> f2 = open("example.jld") do io deserialize(io) end >> (anonymous function) >> >> julia> f2(5) >> ERROR: function f not defined on process 1 >> in error at error.jl:21 >> in anonymous at serialize.jl:398 >> >> >> So deserialized function still refers to the old definition, which is not >> available in this new session. >> >> Is there any better way to serialize a function and run it on an >> unrelated Julia process? >> >> >> On Monday, August 10, 2015 at 2:33:11 PM UTC+3, Jeff Waller wrote: >>> >>> >>> >>>> My question is: does Julia's serialization produce completely >>>> self-containing code that can be run on workers? In other words, is it >>>> possible to send serialized function over network to another host / Julia >>>> process and applied there without any additional information from the >>>> first >>>> process? >>>> >>>> I made some tests on a single machine, and when I defined function >>>> without `@everywhere`, worker failed with a message "function myfunc not >>>> defined on process 1". With `@everywhere`, my code worked, but will it >>>> work >>>> on multiple hosts with essentially independent Julia processes? >>>> >>> >>> According to Jey here >>> <https://groups.google.com/forum/#!searchin/julia-users/jey/julia-users/bolLGcSCrs0/fGGVLgNhI2YJ>, >>> >>> Base.serialize does what we want; it's contained in serialize.jl >>> <https://github.com/JuliaLang/julia/blob/master/base/serialize.jl> >>> >>> >