gpt4 book ai didi

asynchronous - Clojure-并行执行一堆HTTP请求-pmap?

转载 作者:行者123 更新时间:2023-12-04 03:07:34 27 4
gpt4 key购买 nike

我需要发出200个左右的HTTP请求。我希望它们并行运行或成批运行,而且我不确定在Clojure中从何处开始执行此操作。 pmap似乎具有我想要的效果,例如,使用http.async.client:

(defn get-json [url]
(with-open [client (http/create-client)]
(let [resp (http/GET client url)]
(try
(println 1)
(http/string (http/await resp))
(println "********DONE*********")
nil

(catch Exception e (println e) {})))))


music.core=> (pmap get-json [url url2])
1
1
********DONE*********
********DONE*********
(nil nil)

但是我无法证明请求实际上是并行执行的。我需要调用JVM的Thread API吗?我正在搜索并提出其他库,例如Netty,Lamina,Aleph-我应该使用其中之一吗?请为我指出正确的方向,以了解最佳实践/最简单的解决方案。

最佳答案

您所描述的是对pmap的完美使用,我将以类似的方式进行处理。

至于“证明”它可以并行运行,您必须相信pmap的每次迭代都会在一个新线程中运行该函数。但是,确定的一种简单方法是简单地将线程ID打印为完整性检查:

user=> (defn thread-id [_] (.getId (Thread/currentThread)))

user=> (pmap thread-id [1 2 3])

(53 11 56)

由于线程号实际上是不同的-这意味着clojure每次都会创建一个新线程-您可以放心,JVM将并行运行您的代码。

还可以看看其他并行函数,例如 pvaluespcalls。它们为您提供了不同的语义,并且根据当前的问题可能是正确的答案。

关于asynchronous - Clojure-并行执行一堆HTTP请求-pmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21448884/

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