热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Elixir应用程序中找到工作人员?

如何解决《如何在Elixir应用程序中找到工作人员?》经验,为你挑选了2个好方法。

通过入门教程的主管和应用程序部分,我正在为底部的监督树问题编写单元测试.我尝试启动顶级主管,但失败了,出现此错误:

  1) test all buckets die if registry dies (KV.SupervisorTest)
     test/kv/supervisor_test.exs:4
     ** (EXIT from #PID<0.111.0>) shutdown: failed to start child: GenEvent
         ** (EXIT) already started: #PID<0.75.0>

显然应用程序已经启动,因此我需要访问其工作进程.如果我有主管,我可以使用Supervisor.which_children来获取它们.要做到这一点,也许有助于运行kv应用程序:

iex(28)> kvpid = :application.info[:running][:kv]
#PID<0.77.0>

所以现在我有了应用程序的PID.是否有某种方法可以从中获取根管理程序进程,或者我是否必须手动将其注册到某处以从测试中获取它?

或者有没有办法直接从他们的名字中获取工人?我试过:erlang.whereis但它找不到工人:

iex(33)> :erlang.whereis KV.Registry
:undefined

我尝试直接使用模块的名称,但这也不起作用:

test "all buckets die if registry dies" do
    reg = KV.Registry
    KV.Registry.create(reg, "shopping")
    {:ok, shopping_bucket} = KV.Registry.lookup(reg, "shopping")

    Process.exit(reg, :shutdown)
    assert_receive {:exit, "shopping", ^shopping_bucket}
end

它失败并出现此错误:

1) test all buckets die if registry dies (KV.SupervisorTest)
   test/kv/supervisor_test.exs:4
   ** (ArgumentError) argument error
   stacktrace:
     :erlang.send(KV.Registry, {:"$gen_cast", {:create, "shopping"}})
     (elixir) lib/gen_server.ex:424: GenServer.do_send/2
     test/kv/supervisor_test.exs:6

代码在github上.



1> Miroslav Pry..:

您找不到KV.Registry,因为您的代码中存在拼写错误.你打电话:

worker(KV.Registry, [@manager_name, [name: @registry_name]])

但定义是:

def start_link(event_manager, buckets_supervisor, opts \\ []) do

所以你将[name:KV.Registry]作为buckets_supervisor传递,opts是[],因此你的工人没有以KV.Registry的名义注册.

试试这个补丁:https://github.com/mprymek/kv/commit/03ce2e4e5ab4287db2fab6de0bb1aeaf0226346f

 iex(1)> :erlang.whereis KV.Registry
 #PID<0.111.0>



2> José Valim..:

如果您启动主管给它一个名字,您可以让所有工人:

Supervisor.which_children(MyApp.Supervisor)

可能发生的是你试图开始两个worker(GenEvent, ...),他们将有重复的事件.:id明确地传递选项可能会解决它.


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
author-avatar
微笑5885
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有