博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
worker_pool的例子
阅读量:7167 次
发布时间:2019-06-29

本文共 2180 字,大约阅读时间需要 7 分钟。

鉴于,不支持r18,又有在知乎上看到大神推荐这个进程池框架(工作者进程在创建时崩溃,worker_pool不受影响),所以研究了下,贴个小例子

my_pool.erl

1 -module(my_pool). 2  3 -export([start/0, stop/0]). 4 -export([my_overrun_handler/1,do_test/0,do_crash/0]). 5  6 start()-> 7   wpool:start(), 8   start_pool(), 9   ok.10 11 stop()->12   stop_pool(),13   wpool:stop(),14   ok.15 16 start_pool()->17   wpool:start_sup_pool(my_pool,18     [19       {overrun_warning,5000},20       {21         overrun_handler,{?MODULE,my_overrun_handler}22       },23       {workers, 2},24       {worker, {test_worker, [11111]}}25     ]26   ),27   ok.28 29 stop_pool()->30   wpool:stop_pool(my_pool),31   ok.32 33 my_overrun_handler(Report) ->34   io:format("my_overrun_handler ~p~n", [Report]).35 36 do_test()->37   wpool:call(my_pool,{info},best_worker).38 39 do_crash()->40   wpool:call(my_pool,{crash},best_worker).

 

test_worker.erl

1 -module(test_worker). 2  3 -behaviour(gen_server). 4  5 -export([start_link/1, format_status/2]). 6 -export([init/1, handle_call/3, handle_cast/2,handle_info/2, terminate/2, code_change/3]). 7  8 -record(state, {}). 9 10 start_link([Args]) ->11   gen_server:start_link(?MODULE, [Args], []).12 13 init([Args]) ->14   io:format("working thread init ~p,~p~n", [self(), Args]),15   process_flag(trap_exit, true),16   {ok, #state{}}.17 18 handle_call({info}, _From, State) ->19   io:format("info~n"),20   {reply, _Reply = ok, State};21 handle_call({crash}, _From, _State) ->22   1 = 2,23 {noreply, crash};24 handle_call(_Request, _From, State) ->25 {reply, _Reply = ok, State}.26 27 handle_cast(_Msg, State) ->28   {noreply, State}.29 30 handle_info({
'EXIT', _Pid, Reason}, State) ->31 io:format("exit reason ~p~n", [Reason]),32 case Reason of33 normal ->34 io:format("normal exit trapped~n"),35 {stop, normal, State};36 other ->37 io:format("other exit trapped~n"),38 {noreply, State}39 end;40 handle_info(_Info, State) ->41 {noreply, State}.42 43 terminate(_Reason, _State) ->44 io:format("terminate ~p,~p,~p~n", [_Reason, _State, self()]),45 ok.46 47 code_change(_OldVsn, State, _Extra) ->48 {ok, State}.49 50 format_status(_Opt, _StatusData) ->51 erlang:error(not_implemented).

 

转载地址:http://fpmwm.baihongyu.com/

你可能感兴趣的文章