实现流程的最常规方式是什么,只应该完成工作并退出?
在我的案例中,这些工人由simple_one_for_one
主管监督。我一直在寻找,但没有找到比spawn_link
更好的东西:
work(Args) ->
{ok, spawn_link(fun() ->
... do_the_necessary_work ...
end)}.
然而,这种方式似乎不是好的OTP设计。
有什么想法吗?
答案 0 :(得分:4)
这实际上是一种不错的方式,只需确保使用proc_lib:spawn_link(...)
而不是erlang:spawn_link(...)
(存储监视树遍历的祖先,以及更详细的错误日志)。
当然,您可能希望为设置为temporary
或transient
的所有工作人员制定重启策略,具体取决于您在工作人员失败时要执行的操作(重新启动工作人员和尝试再次完成工作或在发生任何故障时丢弃工作。)