У меня есть рабочие процессы, которые должны собирать/вычислять данные в качестве аргументов при запуске. Затем это необходимо для повторного запуска. Где я должен поставить код инициализации? Внутри супервизоров init? Или внутри модулей start_link или init? Есть ли в Erlang лучшие практики, когда дело доходит до этого?Сохранение данных, когда рабочий процесс умирает, как?
2
A
ответ
2
Если компонент gen_server имеет критическое состояние или состояние, которое невозможно перерасчитать/повторно собрать, я обычно избегаю сохранения состояния в gen_server. Вместо этого я хочу сохранить состояние во внешней таблице /sets. Если вы придерживаетесь этого подхода, убедитесь, что таблица ets либо создается процессом externel (который, вы уверены, не умрет), например, процесс приложения -или- создает таблицу ets в методе init метода gen_server и использовать метод «ets: give_away/3», чтобы передать его внешнему процессу (конечно, вам нужно будет проверить, была ли эта таблица уже создана в методе init gen_server). Иначе таблица ets будет уничтожена когда процесс умирает.
Смежные вопросы
- 1. Восстановление потерял multiprocessing.Queue пунктов, когда рабочий процесс умирает
- 2. multiprocessing.Queue висит, когда процесс умирает
- 3. Выполнять команду, когда процесс умирает
- 4. Когда процесс node.js случайно умирает?
- 5. Как запустить рабочий процесс Oozie, когда предыдущий рабочий процесс завершен
- 6. Рабочий процесс Windows: сохранение и опрос
- 7. Убив внешний процесс, когда приложение умирает
- 8. Когда процесс Java умирает после остановки?
- 9. Замки Python, которые исчезают, когда процесс умирает
- 10. Когда IIS перерабатывает рабочий процесс?
- 11. Рабочий процесс - Дизайн базы данных
- 12. Рабочий процесс OOP для данных
- 13. Частый рабочий процесс резервного копирования базы данных
- 14. Как убить linux spawnProcess, когда основной процесс внезапно умирает?
- 15. Как изменить рабочий процесс?
- 16. Рабочий процесс Sharepoint и рабочий процесс Windows
- 17. Сохранение данных в рабочий лист
- 18. Процесс умирает после выхода Jsch
- 19. Как поддерживать ежедневный рабочий процесс
- 20. SSIS - Как улучшить рабочий процесс
- 21. Рабочий процесс разработки PostgreSQL
- 22. Как перезапустить процесс, если он умирает - Linux
- 23. Рабочий процесс Git + Drupal
- 24. sharepoint рабочий процесс
- 25. Ускоренный рабочий процесс
- 26. Как проверить процесс linux, чтобы определить, как/когда процесс умирает/заканчивается?
- 27. perl: Нити не умирают, когда основной процесс умирает
- 28. Обеспечить, чтобы осиротевшие процессы были убиты, когда родительский процесс умирает
- 29. Рабочий процесс Yii2 Team
- 30. Что происходит, когда контролируемый процесс умирает до завершения handle_call?
Можете ли вы дать более подробную информацию: при повторном запуске вы хотите повторно собрать/перерасчитать аргументы или вы хотите сохранить аргументы где-то и повторно использовать их? Лучшая практика зависит от конкретного случая использования, которого я боюсь. –
Я бы также добавил, что я думаю, что данные от супервизора должны быть более постоянного типа. Я бы не занимался крупномасштабной инициализацией в супервизоре, если бы это не было чем-то полезным для всех/большинства его работников. Данные для одного работника я бы ушел на его инициализацию. Просто мое мнение. – rvirding
Да, спасибо, наверное, вопросы о «лучших практиках» будут трудно ответить иногда, не давая личного мнения. Полезно в любом случае. – JoGr