我不想长时间运行。但与此同时,想要使用Supervisor和工作流程。我应该怎么做呢?
场景:每隔午夜我都会使用受监督的流程从外部API获取数据。
但是如果工人完成工作,我不希望这个过程一直持续到第二天。
就我而言,1个主管,5个poolboy进程始终存在。
由于erlang进程很便宜,并且这些进程空闲,我是否应该拥有applications
的主管部分并且每次都启动,并让它空闲?
或者我应该在工作进程完成后尝试杀死Supervisor吗?
当我:observer.start
时,我可以看到我的几个依赖包已启动进程。这个可以吗?我什么时候应该担心过程的数量?
答案 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 question或supervisor:start_child,根据您所使用的语言,为您的工作启动工作人员。