Интервал перезапуска супервизора Erlang

У меня есть супервизор со стратегией перезапуска one_for_one. Можно ли установить некоторый интервал времени между перезапуском дочернего процесса?

F. E. удаленный db раздавлен, и я хочу подождать 10 секунд между попыткой восстановления соединения.

1 ответов


на самом деле, вы можете позволить супервизору немедленно перезапустить своих детей и реализовать то, что называется ленивая инициализация:

  1. супервизор (re)запускает (немедленно) ребенка (скажем, gen_server)
  2. gen_server возвращает тайм-аут 0 в своей функции init
  3. в handle_info вы делаете активное ожидание (ваши 10 секунд), чтобы убедиться, что БД правильно инициализирована

таким образом, вы гарантируете, что все запросы к gen_server обрабатываются после правильной инициализации БД.