gpt4 book ai didi

io - 在 Julia 中读取 cmd 以流式传输到 BSON

转载 作者:行者123 更新时间:2023-12-04 08:56:19 24 4
gpt4 key购买 nike

我有 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 存在完全相同的问题。 .我的反序列化解决方案是相同的,但我欢迎任何改进。

最佳答案

当你说它“让 curl 打开太久”时,你的问题是什么意思有点不清楚,但这里有两种不同的方法来做到这一点:

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在那。

关于io - 在 Julia 中读取 cmd 以流式传输到 BSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63815058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com