Использование постоянных сервисов с Shake - PullRequest
0 голосов
/ 15 октября 2018

У нас есть система сборки Shake, где некоторые правила взаимодействуют с базой данных Postgres, как постоянный фоновый сервис.Как мы можем использовать Shake, чтобы гарантировать, что служба запускается при необходимости и закрывается после завершения Shake?

В частности, мы не хотим запускать службу, если ее не используют никакие правила, и еслион используется, мы не хотим, чтобы он запускался / останавливался несколько раз во время выполнения.

1 Ответ

0 голосов
/ 15 октября 2018

Один из способов реализовать этот шаблон в Shake:

rules = do
    startService <- newCache $ \() -> do
        ... start the service here ...
        runAfter $ ... shut down the service here ...

    "*.txt" %> \out -> do
        startService ()
        ... use the service here ...

Мы создаем кэшированный элемент с именем startService.При использовании newCache операция будет выполнена не более одного раза, только при необходимости.Мы можем запустить сервис, однако имеет смысл (даже потенциально сначала создать сервис).Мы используем runAfter, чтобы закрыть службу, которая будет запущена после того, как Shake завершит свое выполнение.

Чтобы убедиться, что служба доступна в любом правиле, которое требуется, мы сначала вызываем startService ().

В качестве связанной функции, если у вас есть правило, в котором вам не нужен постоянный сервис, а есть только пакетные операции, см. Функцию batch.

...