如何使用Elixir OTP Supervisor / GenServer进行快速工作

时间:2016-03-09 02:11:19

标签: elixir

我不想长时间运行。但与此同时,想要使用Supervisor和工作流程。我应该怎么做呢?

场景:每隔午夜我都会使用受监督的流程从外部API获取数据。

但是如果工人完成工作,我不希望这个过程一直持续到第二天。

就我而言,1个主管,5个poolboy进程始终存在。

由于erlang进程很便宜,并且这些进程空闲,我是否应该拥有applications的主管部分并且每次都启动,并让它空闲?

或者我应该在工作进程完成后尝试杀死Supervisor吗?

当我:observer.start时,我可以看到我的几个依赖包已启动进程。这个可以吗?我什么时候应该担心过程的数量?

1 个答案:

答案 0 :(得分:3)

一些过程确实不是什么大问题。对于我工作的一个应用程序,我们测试了几百万个poolboy进程启动它,它只需要1GB以上的RAM就可以了。根据{{​​3}}:

A newly spawned Erlang process uses 309 words of memory in the non-SMP emulator without HiPE support. (SMP support and HiPE support both add to this size.)

所以真的,不要担心产生太多进程的依赖关系。这不是什么大问题。

至于你的结构问题,一种可能性是使用the docs主管。然后,您只需要一个cron作业,向正在运行的VM发送消息(如果您有Web服务器,可能是cURL POST请求),以执行您的批处理作业,或使用simple_one_for_one在指定的位置运行作业间隔。

编辑:Elixir在timer module中具有类似的功能。请参阅Jose Valim对Process module的回答。

但是,如果您选择开始工作,他们只需拨打a similar questionsupervisor:start_child,根据您所使用的语言,为您的工作启动工作人员。