【发布时间】:2013-09-28 20:06:59
【问题描述】:
我无法使用 lwt 进行数据库访问。我应该将它包含在一个线程中吗?如何?或者创建一个返回'a lwt 值的新线程?如果是这样,如何处理该值?
Printf.eprintf 也是如此,它似乎也被 lwt 阻止了。所以我改用 Lwt_io。但是为什么 lwt 会阻塞常规 io 呢?
我有一个简单的数据库请求,例如Db.update session。它在Lwt_main.run main 函数中。所有这些都在一个 CGI 脚本中(没关系,数据库访问工作正常,直到我开始使用 lwt 命令)。
如果需要,我可以给你更多代码。
问候
偶来
编辑
let main sock env =
(* code omitted *)
Gamesession.update_game_session env#db game_session_connected;
(* code omitted *)
Lwt_main.run (main sock_listen env)
编辑 2
这是解决方案:
Lwt_preemptive.detach (fun () -> Db.call) ()
【问题讨论】:
-
关于 Lwt 的重要一点是,当您开始使用它时,您必须只使用 Lwt。你不能对 Lwt 使用任何阻塞函数。
-
那么从 Lwt 的角度来看,什么是阻塞函数?它是怎么知道的?
-
@Olle,你考虑过使用 postgresql 吗?它有关于 OCaml 和 Lwt 的很好的例子。我可以指出一些。
-
您好,Kakadu,感谢您的提示。我的代码库使用的是 MySQL,所以现在不能切换。至少这不是一件容易的事。一些例子可能仍然有帮助,也许?如果您有任何链接,我很乐意阅读。
标签: mysql database ocaml ocaml-lwt