如何在OCaml中安排任务?

如何在OCaml中安排任务?,ocaml,Ocaml,我有一个任务需要做每4小时或一天一次 在Java中,它有石英、弹簧或定时器 但在OCaml中,我如何做到这一点?有什么好的库吗?我不知道有什么库可以做到这一点,但我认为您可以使用 例如,每4小时打印一次Hello world: let rec hello () = Lwt.bind (Lwt_unix.sleep 14400.) (fun () -> print_endline "Hello, world !"; hello ()) Lwt.async (hell

我有一个任务需要做每4小时或一天一次

在Java中,它有石英、弹簧或定时器


但在OCaml中,我如何做到这一点?有什么好的库吗?

我不知道有什么库可以做到这一点,但我认为您可以使用

例如,每4小时打印一次Hello world:

let rec hello () = 
    Lwt.bind (Lwt_unix.sleep 14400.) 
       (fun () -> print_endline "Hello, world !"; hello ())
Lwt.async (hello)
异步函数调用这里给出的函数,hello in a asynchronous light weight thread,因此您可以在程序中自由地执行其他操作。只要您的程序没有退出,Hello world将每4小时打印一次

如果希望能够停止它,还可以像这样启动线程,而不是Lwt.async:

let a = hello ()
然后,要停止线程:

Lwt.cancel a
请注意,Lwt.cancel会引发Lwt.cancel异常


然后,为了能够在一天中的特定时间启动任务,我只能鼓励您使用来自的函数,如localtime和mktime。

我不知道有任何库可以做到这一点,但我认为您可以使用

例如,每4小时打印一次Hello world:

let rec hello () = 
    Lwt.bind (Lwt_unix.sleep 14400.) 
       (fun () -> print_endline "Hello, world !"; hello ())
Lwt.async (hello)
异步函数调用这里给出的函数,hello in a asynchronous light weight thread,因此您可以在程序中自由地执行其他操作。只要您的程序没有退出,Hello world将每4小时打印一次

如果希望能够停止它,还可以像这样启动线程,而不是Lwt.async:

let a = hello ()
然后,要停止线程:

Lwt.cancel a
请注意,Lwt.cancel会引发Lwt.cancel异常


然后,为了能够在一天中的特定时间启动任务,我只能鼓励您使用来自的函数,如localtime和mktime。

也许?虽然您想要做的听起来更倾向于cron工作。我不知道OCaml有什么cron包装器。@KristopherMicinski是的,也许是cron工作?虽然您想要做的听起来更倾向于cron工作。我不知道OCaml有什么cron包装器。@KristopherMicinski是的,cron jobit会永远运行吗?如何启动/停止它?这将永远运行,不像cron:程序不运行的地方。在本例中,您的程序是一个后台守护进程,在cron中,您的程序执行一些工作,然后停止。@JacksonTale。您可以通过守护方式实现它,等待一段时间,然后检查时间是否已过,等等,或者使用cron。就我个人而言,我建议为该场景在cron表中写入一个条目:格式非常简单,即使没有ocaml绑定也可以计算出来。是的,您必须保持程序运行,否则轻量级线程将与主线程一起消亡。通过执行let uz=start,你说的是好的,只需启动一个执行start的线程,然后执行下一条指令,但是没有下一条指令,所以程序退出。通过将let=start替换为let=Lwt.bind start Lwt.return,您可以告诉您的程序等待start结束,而这永远不会结束。您也可以使用Lwt.wait:Lwt.bind fst Lwt.wait Lwt.returnYes无限期地等待,它似乎比我的版本Lwt.bind更合适。它将永远运行吗?如何启动/停止它?这将永远运行,不像cron:程序不运行的地方。在本例中,您的程序是一个后台守护进程,在cron中,您的程序执行一些工作,然后停止。@JacksonTale。您可以通过守护方式实现它,等待一段时间,然后检查时间是否已过,等等,或者使用cron。就我个人而言,我建议为该场景在cron表中写入一个条目:格式非常简单,即使没有ocaml绑定也可以计算出来。是的,您必须保持程序运行,否则轻量级线程将与主线程一起消亡。通过执行let uz=start,你说的是好的,只需启动一个执行start的线程,然后执行下一条指令,但是没有下一条指令,所以程序退出。通过将let=start替换为let=Lwt.bind start Lwt.return,您可以告诉您的程序等待start结束,而这永远不会结束。您也可以使用Lwt.wait:Lwt.bind-fst-Lwt.wait-Lwt.returnYes无限期地等待,它似乎比我使用Lwt.bind的版本更合适。