Как динамически запускать процесс Erlang для одного действия и убивать его после завершения действия

На один процесс erlang OTP (gen_server) поступает много параллельных запросов. Одного процесса недостаточно, чтобы справиться с этим. У меня может быть пул фиксированных номеров тех же процессов, чтобы справиться с этим, используя Poolboy или worker_pool.

Но я не хочу иметь набор исправлений пула процессов. Я хочу создать динамический процесс для обработки этой активности и быть убитым, как только он выполнит свою работу.

Таким образом, у меня будет N активных процессов для N параллельных запросов. и чем он будет убит, как только этот процесс завершит обработку.

Как я могу этого добиться?


person ManasP    schedule 07.07.2017    source источник


Ответы (1)


Используйте модуль супервизора Erlang и используйте transient в его флагах.
Когда наступит ваше событие, запустите новый дочерний элемент для этого, а когда событие завершится, выйдите из процесса с причиной 'normal'.

Информация о поведении руководителя: Дизайн — API

person Pouriya    schedule 07.07.2017
comment
Мне нужно больше деталей, например, у нас будет один супервизор и один рабочий процесс, чем то, как у него будет много процессов, работающих одновременно? - person ManasP; 07.07.2017
comment
codefather.org/posts/ это полезно? - person Pouriya; 07.07.2017
comment
Извините, что отвечаю поздно. У меня не было времени реализовать ваше предложение. Да, это действительно очень полезно. Я использовал ваш код и немного изменил его в соответствии со своими потребностями. Я создал отдельный процесс супервайзера, который вызывает worker_pool:start_link() для запуска этого worker_pool. Я не создаю постоянного ребенка, но я создаю временного ребенка. также мне нужно передать несколько параметров моему Fun(), как я могу это сделать? - person ManasP; 12.07.2017
comment
если вы хотите наблюдать за своими процессами, и ваши процессы ведут себя по-разному (сбой по некоторым понятным причинам, кроме обычных), или они должны быть перезапущены после некоторых тайм-аутов, используйте директора в качестве супервизора, github.com/pouriya-jahanbakhsh/director - person Pouriya; 12.07.2017
comment
Я думаю, что ваше первое предложение достаточно хорошо, чтобы решить мою проблему, за исключением двух моментов. 1. Мне нужно передать параметры моей забаве. как я могу это сделать? 2. Я хочу, чтобы мой рабочий процесс автоматически завершался после выполнения его работы, т. е. запуска веселья. Я хочу добавить рабочий процесс и одновременно вызвать fuc и убить его, когда закончу. - person ManasP; 13.07.2017