erlang - 主管启动后启动动态 simple_one_for_one worker

标签 erlang elixir erlang-otp erlang-supervisor

我有一个名为 Supervisor监督很多simple_one_for_one worker ,它们定期为我系统上的每个用户执行任务。

我希望应用程序在 Supervisor 时为每个用户启动一名工作人员第一次启动,如果 Supervisor,我希望应用程序也能这样做无论出于何种原因,都将在以后重新启动。

目前我在 Application 中动态启动所有 child 的 start(type, args)回调,但如果 Supervisor重新启动,这不会启动所有子进程。

如何确保在 Supervisor 之后立即启动所有动态子工随时启动/重启?

(我的应用程序在 Elixir 中,但同样的原则适用于 Erlang。)

最佳答案

我这样做的一种方法是使用另一个主管和一个“重启 worker ”。你的主管是新主管的 child ——它是重启 worker 的 sibling 。新主管使用 one_for_allrest_for_one ,这样如果你的主管死了,重启 worker 也会重新启动。

当restart worker重新启动时,它可以启动动态worker。

关于erlang - 主管启动后启动动态 simple_one_for_one worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36792475/

相关文章:

Ruby 调试输出 - 轻松打开/关闭

elixir - Ecto 中的数据类型 - "value too long for type character varying(255)"

Elixir 进程限制?

mysql - 具有可变参数的 Ecto 查询和自定义 MySQL 函数

database - Erlang-如何在没有记录的情况下使用Mnesia

erlang - 如果被监控的进程在 handle_call 完成之前死亡,会发生什么?

erlang - 如何告诉一个进程创建另一个进程并跟踪它

Erlang进程队列最佳实践?

concurrency - 在 erlang 中轮询接收 block 是好的做法吗?

erlang - 是否可以在 Erlang 中实现 Pregel 而无需 super 步骤?