Как запланировать задачу в 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.

Другие вопросы по тегам