当我运行以下代码时,我得到了一个弃用,称产品已被渠道替换。

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! 而不是生产没有运气。

有任何想法吗?

===============>>#1 票数: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

或者,使用通道本身作为迭代器(迭代任务正在被弃用,以及产生/消费功能)

julia> for i in my_channel
         i |> println
       end
no.jld
yes.jld

或者你可以根据文档使用@schedulebind等,但看起来上面是最简单的方法。

  ask by Chuck Carlson translate from so

未解决问题?本站智能推荐: