Как запланировать задачу в OCaml?
У меня задание нужно делать каждые 4 часа или раз в день.
В Java это имеет quartz
или же spring
или же timer
,
Но в OCaml, как мне это сделать? Любая хорошая библиотека для этого?
1 ответ
Я не знаю ни одной библиотеки для этого, но я думаю, что вы можете легко реализовать такое поведение, используя библиотеку Lwt.
Небольшой пример, чтобы напечатать Hello world каждые 4 часа:
let rec hello () =
Lwt.bind (Lwt_unix.sleep 14400.)
(fun () -> print_endline "Hello, world !"; hello ())
Lwt.async (hello)
Функция Lwt.async вызывает данную функцию (здесь, привет) в асинхронном легком потоке, так что вы можете делать другие вещи в вашей программе. Пока ваша программа не закрывается, "Hello world" будет печататься каждые 4 часа.
Если вы хотите, чтобы это можно было остановить, вы также можете запустить поток, подобный этому, вместо Lwt.async:
let a = hello ()
А затем, чтобы остановить поток:
Lwt.cancel a
Имейте в виду, что Lwt.cancel выдает исключение "Lwt.canceled"!
Затем, чтобы иметь возможность запускать задачу в определенное время суток, я могу только рекомендовать вам использовать функции из модуля Unix, такие как localtime и mktime.