我正在使用erlang编写一个map reduce实现。
为了得到映射已完全完成的通知(所有数据已被处理),我在执行实际映射的工人和"管理进程"之间创建了一个链接,该进程将捕获来自工人的EXIT
信号,并查看原因是否为normal
。如果是,它将认为作业已正确运行。如果没有,则根据Pid
,它将确定失败的作业并为该作业生成另一个工人(我将保留一个工人的Pid
s簿)。一旦从所有Pid
接收到具有Reason=normal的EXIT
信号,映射就完全完成了。
我的问题是,1)这安全吗?2)这是一种好的做法吗?
顺便说一下,作业是幂等的。
目前为止,这种方法听起来不错。
但是你不应该自己实现它,而应该使用一个supervisor。
simple_one_for_one类型的管理器实现了与您描述的几乎完全相同的行为。