在 Julia 中读取 cmd 以流式传输到 BSON
Read cmd to stream to BSON in Julia
我有 curl 命令,我想使用 BSON 加载它的输入。
出于性能原因,我想直接将 curl 输出读取到内存中,而不将其保存到文件中。
另外,我想尽快关闭curl,所以我想从curl中读取数据,然后将它们传递给BSON,当curl打开时我们遇到了一些问题,因为它比连续解析快。
我知道这行得通,但它让 curl 打开的时间太长,当我们同时并行多次执行此操作时会导致问题,而且我们下载的服务器有点忙。
using BSON
cmd = `curl <some data>`
BSON.load(open(cmd))
要尽快关闭 cmd
,我有这个:
# created IOBuffer to wrap bytes
import BSON.load
function BSON.load(bytes::Vector{UInt8})
io = IOBuffer()
write(io, bytes)
seekstart(io)
BSON.load(io)
end
cmd = `curl <some data>`
BSON.load(read(cmd))
这可行,但我认为它非常难看。另外我不确定这是否会造成一些性能损失。
有没有更优雅的方法来做到这一点?我可以 read(cmd)
进入某个 IO 结构,然后将其传递给 BSON.load
吗?
我意识到 Serialization.deserialize
也存在完全相同的问题。我的反序列化解决方案是相同的,但我欢迎任何改进。
有点不清楚你的问题是什么意思,当你说它“保持卷曲打开太久”时,但这里有两种不同的方法来做到这一点:
julia> using BSON
julia> url = "https://raw.githubusercontent.com/JuliaIO/BSON.jl/master/test/test.bson"
"https://raw.githubusercontent.com/JuliaIO/BSON.jl/master/test/test.bson"
julia> open(BSON.load, `curl -s $url`)
Dict{Symbol,Any} with 2 entries:
:a => Complex{Int64}[1+2im, 3+4im]
:b => "Hello, World!"
julia> BSON.load(IOBuffer(read(`curl -s $url`)))
Dict{Symbol,Any} with 2 entries:
:a => Complex{Int64}[1+2im, 3+4im]
:b => "Hello, World!"
第一个版本与您的第一个版本相似,但下载完成后会立即关闭 curl 进程。第二个版本将 curl 调用的结果读取到字节向量中,将其包装在 IOBuffer
中,然后对其调用 BSON.load
。
我有 curl 命令,我想使用 BSON 加载它的输入。 出于性能原因,我想直接将 curl 输出读取到内存中,而不将其保存到文件中。 另外,我想尽快关闭curl,所以我想从curl中读取数据,然后将它们传递给BSON,当curl打开时我们遇到了一些问题,因为它比连续解析快。
我知道这行得通,但它让 curl 打开的时间太长,当我们同时并行多次执行此操作时会导致问题,而且我们下载的服务器有点忙。
using BSON
cmd = `curl <some data>`
BSON.load(open(cmd))
要尽快关闭 cmd
,我有这个:
# created IOBuffer to wrap bytes
import BSON.load
function BSON.load(bytes::Vector{UInt8})
io = IOBuffer()
write(io, bytes)
seekstart(io)
BSON.load(io)
end
cmd = `curl <some data>`
BSON.load(read(cmd))
这可行,但我认为它非常难看。另外我不确定这是否会造成一些性能损失。
有没有更优雅的方法来做到这一点?我可以 read(cmd)
进入某个 IO 结构,然后将其传递给 BSON.load
吗?
我意识到 Serialization.deserialize
也存在完全相同的问题。我的反序列化解决方案是相同的,但我欢迎任何改进。
有点不清楚你的问题是什么意思,当你说它“保持卷曲打开太久”时,但这里有两种不同的方法来做到这一点:
julia> using BSON
julia> url = "https://raw.githubusercontent.com/JuliaIO/BSON.jl/master/test/test.bson"
"https://raw.githubusercontent.com/JuliaIO/BSON.jl/master/test/test.bson"
julia> open(BSON.load, `curl -s $url`)
Dict{Symbol,Any} with 2 entries:
:a => Complex{Int64}[1+2im, 3+4im]
:b => "Hello, World!"
julia> BSON.load(IOBuffer(read(`curl -s $url`)))
Dict{Symbol,Any} with 2 entries:
:a => Complex{Int64}[1+2im, 3+4im]
:b => "Hello, World!"
第一个版本与您的第一个版本相似,但下载完成后会立即关闭 curl 进程。第二个版本将 curl 调用的结果读取到字节向量中,将其包装在 IOBuffer
中,然后对其调用 BSON.load
。