gpt4 book ai didi

concurrency - 如何并行制作阻塞调用列表并以先到先得的方式获得结果?

转载 作者:行者123 更新时间:2023-12-04 03:00:36 25 4
gpt4 key购买 nike

基本上我有一个要调用的函数列表

'(f1 f2 f3 f4)

每一个都是阻塞的,需要不同的时间才能返回。

我想要一个惰性序列s,其中第一个元素是最快返回调用的结果,调用

(first s)

只会阻塞该调用的响应时间。其他元素也是如此。

具体例子:如果

  • f1 需要 10 秒
  • f2 需要 5 秒
  • f3 耗时 1s
  • f4 耗时 2s

然后调用

(first s)

会阻塞1s并返回(f3)的结果

(into [] (take 2 s)) 

会阻塞2s并返回(f3)和(f4)等的结果

我考虑过将所有函数包装在 future 中并将结果传递给 promise。但我不知道如何确定哪个 promise 会最快兑现。

有人知道怎么做吗?

最佳答案

(require '[clojure.core.async
:refer [chan
>!
go
<!!]])

(def c (chan))

(def fns [#(do (Thread/sleep 5000) :fn-1)
#(do (Thread/sleep 2000) :fn-2)
#(do (Thread/sleep 1000) :fn-3)])
(do
(go
(doseq [f fns]
(go (>! c (f)))))

(println "First => " (<!! c)))

关于concurrency - 如何并行制作阻塞调用列表并以先到先得的方式获得结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27078832/

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