Elixir DynamicSupervisor按名称获取孩子
在Elixir DynamicSupervisor按名称获取孩子,elixir,otp,Elixir,Otp,在DynamicSupervisor模块中,我们有一个名为start\u child的函数,它注册并启动一个子项。我的问题是:以后我如何才能按名称找到特定的子进程,因为例如,进程。whereis函数只使用atom作为参数,我不想用atom命名子进程,我将它们命名为元组,例如,没有通用的解决方案。您有两个选项来管理此项 如果您的所有子模块DynamicSupervisor都是不同的模块,请使用列出子模块,并根据模块名称匹配最后一个参数 否则,您应该使用tuple为您的孩子命名,并维护自己的替代注册
DynamicSupervisor
模块中,我们有一个名为start\u child
的函数,它注册并启动一个子项。我的问题是:以后我如何才能按名称找到特定的子进程,因为例如,进程。whereis
函数只使用atom作为参数,我不想用atom命名子进程,我将它们命名为元组,例如,没有通用的解决方案。您有两个选项来管理此项
如果您的所有子模块DynamicSupervisor
都是不同的模块,请使用列出子模块,并根据模块名称匹配最后一个参数
否则,您应该使用tuple为您的孩子命名,并维护自己的替代注册表以查找孩子。您可以使用 在上面的示例中,您可以用您的子模块替换
Agent
{:ok, _} = Registry.start_link(keys: :unique, name: Registry.ViaTest)
name = {:via, Registry, {Registry.ViaTest, "my_child_name"}}
{:ok, _} = Agent.start_link(fn -> 0 end, name: name)
Agent.get(name, & &1)
#=> 0
Agent.update(name, &(&1 + 1))
Agent.get(name, & &1)
#=> 1
Registry.lookup(Registry.ViaTest, "my_child_name")
#=> [{self(), nil}]
本例使用字符串作为键(
“我的孩子的名字”
),但它可以是元组之类的任何长生不老药术语。复制粘贴长生不老药文档的原因是什么?