【问题标题】:Create multi thread in clojure在clojure中创建多线程
【发布时间】:2020-05-08 00:28:34
【问题描述】:

我有这个代码:


      (do 
               ;**[1]** 
        (.start (Thread. 
          (http/get "http://127.0.0.1:8001/cardiologista/api/auth/ms1"
                       {:query-params {:verify "my-hash"}}))
        )
            ;**[2]**
        (.start (Thread. 
               (let [session (:session request)]
                   (-> (redirect "/client/dashboard")
                       (assoc :session verifica))))
        )
      )

我想打一个 get 调用 ([1]),我不想等待回调(我不会使用回调),但是,我不想为了等待该调用的响应以重定向([2])页面,我尝试这样做(使用线程),但它不能正常工作。

简而言之:我想进行 GET 调用 [1],然后调用重定向函数 [2],但我等不及 GET打电话回应。 (我不知道这是否会使用线程解决)

【问题讨论】:

  • 你真的需要2个线程吗?您的“重定向”逻辑可能应该在当前线程中运行,因此无需为此创建新线程。另外我可能会使用期货而不是线程。
  • 非常感谢,我用future解决了这个问题。我真的不知道这个功能

标签: clojure luminus


【解决方案1】:

正如cmets中朋友所说,我用future解决问题,功能是这样的:

(do 
  (future 
    (http/get "http://127.0.0.1:8001/cardiologista/api/auth/ms1"
              {:query-params {:verify "my-hash"}}))
  (let [session (:session request)]
    (-> (redirect "/cliente/dashboard")
        (assoc :session verifica))))

【讨论】:

  • 您真的只想发出 GET 请求并忽略结果吗?
  • @cfrick 是的,我的情况是用户登录到服务后(在此代码的情况下),我需要将该会话保存在另一个服务中,以便将来这两个服务之间进行通信.
  • 不会启动future 然后忽略结果。这是非常糟糕的调试体验的秘诀。 futures 吞下所有发生在其中的异常,直到您取消引用它们 (@)。注意(do (future (/ 1 0)) (println "No exception?"))。如果您要使用它,请100%确保以后永远不会发生异常。
猜你喜欢
  • 2017-10-17
  • 2018-08-13
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
相关资源
最近更新 更多