【问题标题】:How to spawn a Erlang process dynamically for one activity and kill it once activity done如何为一项活动动态生成 Erlang 进程并在活动完成后终止它
【发布时间】:2017-12-11 08:10:24
【问题描述】:

有许多并行请求进入一个 erlang OTP (gen_server) 进程。 一个进程不足以处理这个问题。 我可以使用 Poolboy 或 worker_pool 拥有固定数量的相同进程池来处理这个问题。

但我不想修复一组进程池。 我想动态创建 Process 来处理该活动并在完成工作后被杀死。

因此,对于 N 个并行请求,我将拥有 N 个活动进程。 并且一旦该进程完成处理,它就会被杀死。

我怎样才能做到这一点?

【问题讨论】:

    标签: erlang erlang-otp gen-server


    【解决方案1】:

    使用 Erlang 主管模块并在其标志中使用 transient
    当你的事件发生时,启动新的子进程,当事件完成后,退出进程,原因是'normal'

    主管行为信息:Design - API

    【讨论】:

    • 我需要更多细节,比如我们将拥有一个主管和一个工作进程,而不是同时运行多个进程?
    • 抱歉回复晚了。我没有时间实施您的建议。是的,它真的很有帮助。我已经使用了您的代码并根据需要对其进行了一些修改。我已经创建了单独的主管进程,他们调用 worker_pool:start_link() 来启动这个 worker_pool。我不是在创造“永久”孩子,而是在创造“暂时”孩子。我还必须将一些参数传递给我的 Fun() 我该怎么做?
    • 如果你想监督你的进程并且你的进程有很多不同的行为(除了正常的一些可读的原因崩溃)或者他们应该在一些超时后重新启动,使用director作为主管,github.com/pouriya-jahanbakhsh/director跨度>
    • 我认为您的第一个建议足以解决我的问题,除了两点。 1.我需要将参数传递给我的“乐趣”。我该怎么做? 2.我希望我的工作进程在其工作完成后自动终止,即执行“fun”。我想添加工作进程并同时调用“fuc”并在完成后将其终止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多