首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lwt和数据库访问

Lwt和数据库访问
EN

Stack Overflow用户
提问于 2013-09-28 20:06:59
回答 1查看 597关注 0票数 1

我无法让我的数据库访问工作与lwt。我应该把它包含在线程中吗?多么?还是创建一个返回'a lwt值的新线程?如果是的话,该如何处理这个价值呢?

Printf.eprintf也是如此,它似乎也被lwt阻塞了。所以我用Lwt_io代替。但是为什么lwt要阻止普通io呢?

我所拥有的是一个简单的db请求,如Db.update session。它在Lwt_main.run main函数中。所有这些都在CGI脚本中(应该没关系,数据库访问可以正常工作,直到我开始使用lwt命令)。

如果需要的话我可以给你更多代码。

问候

奥利

编辑

代码语言:javascript
复制
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

这就是解决办法:

代码语言:javascript
复制
Lwt_preemptive.detach (fun () -> Db.call) ()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 23:18:50

Printf.eprintf没有被“阻塞”,它只是缓冲参数被更改,并且通常在程序结束之前消息不会显示。您应该尝试eprintf "something\n%!" (%!的意思是“刷新”),但是使用Lwt_io更好。

对于数据库,我不知道,您没有说明您使用的是哪个库(至少名为ocaml-mysql的库对Lwt不友好,因此可能需要使用Lwt_preemptive)。

编辑

你的:

代码语言:javascript
复制
Lwt_preemptive.detach (fun () -> Db.call) ()

此调用创建一个线程,该线程一旦执行,将立即返回函数Db.call。因此,在这种情况下,Lwt_preemptive.detach基本上什么也不做:)

我不知道,但如果:

代码语言:javascript
复制
Db.call: connection_params -> connection_handle

你就会有

代码语言:javascript
复制
let lwt_db_call connection_params =
  Lwt_preemptive.detach Db.call connection_params
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19071158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档