如何使用Lwt_pool

时间:2014-12-10 17:02:00

标签: ocaml ocaml-lwt

我希望拥有一个具有最大连接数的Redis数据库连接池。看起来Lwt_pool是我正在寻找的解决方案,但我不太了解它应该如何运作。例如,我有一些问题:

  • 文档谈到Lwt_pool很好地重用了开放式连接,但是池如何知道哪些连接可以重用?据我所知,没有特别的方式来表明这一点,API只提供use方法。

  • 是否有比Lwt文档更好的资源来了解它是如何工作的?我无法轻松找到有关它的代码示例或许多可用资源。

1 个答案:

答案 0 :(得分:3)

  • 传递给use的函数返回一个线程。线程完成后,连接将被释放回池中。

  • 源代码相当容易阅读。在这种情况下:

    let use p f =
      acquire p >>= fun c ->
      Lwt.catch
        (fun () ->
           let t = f c in
           t >>= fun _ ->
           release p c;
           t)
        (fun e ->
           checked_release p c;
           Lwt.fail e)