当我运行以下代码时,我得到一个弃用,称产品已被渠道替换。
function source(dir)
filelist = readdir(dir)
for filename in filelist
name,ext = splitext(filename)
if ext == ".jld"
produce(filename)
end
end
end
path = "somepathdirectoryhere"
for fname in Task(source(path))
println(fname)
end
我找不到关于如何使用频道执行此操作的示例。我已经尝试创建一个全局频道并使用put!而不是生产没有运气。
有什么想法吗?
答案 0 :(得分:3)
这是一种方式。修改您的函数以接受通道参数,并在其中包含put!
数据:
function source(dir, chnl)
filelist = readdir(dir)
for filename in filelist
name, ext = splitext(filename)
if ext == ".jld"
put!(chnl, filename) % this blocks until "take!" is used elsewhere
end
end
end
然后使用Channel
构造函数隐式地创建 任务(它使用一个只有一个参数来表示通道的函数,所以我们需要包装source
函数一个匿名函数):
my_channel = Channel( (channel_arg) -> source( pwd(), channel_arg) )
然后,检查通道是否仍处于打开状态(即任务尚未完成),如果是,则采取参数:
julia> while isopen( my_channel)
take!( my_channel) |> println;
end
no.jld
yes.jld
或者,使用 channel 本身作为迭代器(迭代任务已被弃用,以及产生/消费功能)
julia> for i in my_channel
i |> println
end
no.jld
yes.jld
或者,您可以根据文档使用@schedule
和bind
等,但似乎以上是最直接的方法。