Как реализовать временных работников в Erlang/OTP

Каков наиболее традиционный способ реализации процесса, который должен только выполнить свою работу и выйти?

В моем случае этими работниками руководит simple_one_for_one супервайзер. Я искал вокруг, но не нашел ничего лучше, чем просто spawn_link:

work(Args) ->
{ok, spawn_link(fun() ->
    ... do_the_necessary_work ...
end)}.

Тем не менее, этот способ не кажется хорошим дизайном OTP.

Любые идеи?


person citxx    schedule 19.11.2012    source источник
comment
Есть ли в SO подсветка синтаксиса erlang?   -  person citxx    schedule 19.11.2012


Ответы (1)


На самом деле это достойный способ, просто убедитесь, что вы используете proc_lib:spawn_link(...) вместо erlang:spawn_link(...) (для хранения предков для обхода дерева наблюдения и для более подробных журналов ошибок).

И, конечно же, вы можете захотеть сделать стратегию перезапуска для всех воркеров установленной на temporary или transient, в зависимости от того, что вы собираетесь делать в случае сбоя воркера (перезапустить воркера и попытаться выполнить задание еще раз или отменить задание). в случае каких-либо сбоев).

person demeshchuk    schedule 19.11.2012