问题标签 [ocaml-lwt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
853 浏览

node.js - What are the differences between Lwt.async and Lwt_main.run on OCaml/Node.JS?

I am experimenting with js_of_ocaml and node.js. As you know, node.js makes extensive use of callbacks to implement asynchronous requests without introducing explicit threads.

In OCaml we have a very nice threading library, Lwt, coming with a very useful syntax extension. I wrote a prototype with a binding to some node library (a AWS S3 client) and added a lwt-ish layer to hide the callback.

#xA;

Since there is no binding to Lwt_main for node.js, I had to run my code with Lwt.async. What are the differences between running the code with Lwt.async rather than with Lwt_main.run – the latter not existing in node.js? Is it guaranteed that the program will wait until the asynchronous threads are completed before exiting, or is this rather a lucky but random behaviour of my code?

0 投票
1 回答
278 浏览

subprocess - LWT 与子流程的简单交互

Unix这是一个使用模块与子进程交互的简单程序。我只是启动一个catshell 命令,向它发送一个字符串并读回它:

最近我开始研究这个Lwt库,我想用它重现相同的功能。我认为以下内容应该具有完全相同的结果:

但它并没有像我期望的那样工作——显然它读取然后打印一个空字符串。

我想我对Lwt应该如何工作有一些基本的困惑,但我无法弄清楚。有人可以告诉我如何使用 与子进程进行通信Lwt吗?

0 投票
0 回答
127 浏览

user-interface - 集成 GTK 和 Lwt

我正在开发一个我想使用 lablgtk 和 lwt 的程序。我有在 lwt 线程上获取数据的函数,然后我想使用 lablgtk 在 GUI 中显示数据。我正在努力将 lablgtk 集成到 lwt 框架中。下面是一个提炼版本,它演示了我的问题,即我可以启动 GUI,但没有其他任何反应。任何帮助是极大的赞赏。

我正在编译ocamlfind ocamlc -g -package lwt,lwt.syntax,lwt.unix,lablgtk2 -linkpkg gtk_and_lwt.ml -o GtkAndLwt

0 投票
1 回答
351 浏览

webserver - 错误:未绑定记录字段 Server.callback - Ocaml

我正在关注一个教程,该教程解释了如何在 OCaml 中使用lwtCohttp.

我有一个_tags包含以下内容的文件:

还有一个webserver.ml

然后,ocamlbuild -use-ocamlfind webserver.native触发以下错误:

如果我更改为:Server.create { callback; conn_closed }它也会触发:

我不知道如何解决这个问题,所以提前感谢您对此进行调查。

0 投票
1 回答
568 浏览

ocaml - Lwt 和 Cohttp:`致命错误:异常 Unix.Unix_error(Unix.ECONNRESET, "read", "")`

我在带有 Cohttp 和 Lwt 的 Ocaml 中有简单的 HTTP 服务器。当我运行wrk应用程序时,大约 50% 的时间会在完成后立即崩溃wrk。我想崩溃是由连接的意外断开触发的。

我在控制台上看到以下错误:

有没有办法防止这种情况发生?

我的完整源代码是:

谢谢!

0 投票
1 回答
483 浏览

ocaml - Ocaml lwt 永无止境的循环

我正在尝试使用 Lwt 编写终端应用程序。基本上只要我的应用程序正在运行,我就需要使用 Lwt_io.read_line 观察终端的输入。

在我的程序运行时,是否有比以下(伪代码)更好的方法来实现某种循环?

我不确定这是否是正确的方法。每次来自 my_application 的所有线程都完成时, Lwt_main.run 会再次被调用一次又一次......

Lwt 是否有其他或更好的方法来处理这个问题?

0 投票
1 回答
289 浏览

multithreading - Lwt.async() 没有按预期工作

我正在OcamlMirageOS(Unix) 之上开发一个 Web 服务,目前我在使用Lwt.async(). Lwt 文档说明如下:

val async : (unit -> 'a t) -> unit

async f 在不等待结果的情况下启动一个线程。如果失败(现在或以后),则将异常提供给 Lwt.​async_exception_hook。

如果你想启动一个可能失败的线程并且不关心它的返回值是什么,也不关心它何时终止(例如,因为它正在循环),你应该使用这个函数。

因此,我立即将 Lwt.async 视为运行一些测试并检查实际执行是否异步的好候选。不幸的是,它没有按预期工作。我的代码如下:

为了清楚起见,TEST.start 执行一系列线程操作。我认为 Lwt.async 中的函数在做什么并不重要,因为无论返回/做什么都应该被忽略。我错了吗?

最后,我的问题是:为什么客户端实际上必须等待线程接收 OK 响应?无论有没有异步,行为基本相同。

0 投票
1 回答
600 浏览

ocaml - Ocaml lwt 从其他进程读取标准输出

我正在尝试在 Ocaml 中为基于终端的应用程序构建一个新的前端。主要思想是使用 Lwt 生成一个新进程:

然后稍后将内容写入进程的标准输入,以在外部应用程序中执行命令。

当我从命令中读取结果时Lwt_io.read_line_opt. 我如何阅读直到没有任何行?我遇到的问题是我的程序只是在某个点挂起。当我阅读时read_line_opt,当我到达终点时,它似乎只是在等待重定向新输出的过程。

我该如何处理?

我正在尝试做的一个具体示例:(基于终端的应用程序是 ocamldebug)

程序源代码:

如果您通常使用 运行ocamldebugtest.d.byte您会在终端中获得以下信息:

当我执行上述程序时,我会打印以下内容:

在这里它只是挂起......,我的程序没有退出。即使我在终端中执行 Ctrl-c/Ctrl-c,也会有一个活动的 ocamlrun 进程。然而,终端变得响应。

我在这里遗漏了一些明显的东西?

0 投票
1 回答
776 浏览

ocaml - Ocaml Lwt.wait()

我有一个关于 lwt 的等待函数以及如何在我自己的自定义函数中使用它的问题,该函数将返回一个“Lwt.t 线程”。首先让我们向您展示一个示例。

在上面的函数中,我调用 wait 来产生一个睡眠线程及其唤醒器,但我不确定如何为睡眠线程提供可能的整数回复,并且仍然能够从 get_int 函数返回一个睡眠线程。我提供了一行 (Lwt_io.read_int(i) >>= fun i -> Lwt.wakeup wi;) 似乎可行,但我不确定这是否是完成此任务的正确方法。任何指针或链接或评论?

注意:我问是因为将 Lwt_io.read_int(i) 添加到函数中是多余的。我可以删除 get_int 函数并调用 Lwt_io.read_int(i) 但我很好奇你将如何在没有冗余的情况下做到这一点。

0 投票
2 回答
384 浏览

ocaml - Lwt_io.read_int 的正确用法是什么?

如何正确使用 Lwt_io.read_int?我尝试了我认为明显的用法,但没有得到明显的结果......

我编译运行并在提示时输入12345,程序显示875770417。

我在这里遗漏了一些东西......

在下面的帮助下,我做到了这一点。它有效,我希望它是正确的。

我想我应该发布一些代码来演示 Lwt_io.read_int 的正确用法。