zoukankan      html  css  js  c++  java
  • worker_pool的例子

    鉴于poolboy的坑pooler不支持r18,又有在知乎上看到大神推荐worker_pool这个进程池框架(工作者进程在创建时崩溃,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 of
    33     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).
  • 相关阅读:
    Android中Java反射技术的使用示例
    汉语-词语-念佛:百科
    汉语-词语-纯净:百科
    汉语-词语-具足戒:百科
    汉语-词语-比丘:百科
    汉语-词语-无常:百科
    汉语-词语-脱离:百科
    袁氏-人物-佛学-袁焕仙:百科
    汉语-词语-无量:百科
    汉语-词语-中观:百科
  • 原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/4881075.html
Copyright © 2011-2022 走看看