worker_pool的例子
2015-10-14 23:07
169 查看
鉴于poolboy的坑,pooler不支持r18,又有在知乎上看到大神推荐worker_pool这个进程池框架(工作者进程在创建时崩溃,worker_pool不受影响),所以研究了下,贴个小例子
my_pool.erl
test_worker.erl
my_pool.erl
-module(my_pool). -export([start/0, stop/0]). -export([my_overrun_handler/1,do_test/0,do_crash/0]). start()-> wpool:start(), start_pool(), ok. stop()-> stop_pool(), wpool:stop(), ok. start_pool()-> wpool:start_sup_pool(my_pool, [ {overrun_warning,5000}, { overrun_handler,{?MODULE,my_overrun_handler} }, {workers, 2}, {worker, {test_worker, [11111]}} ] ), ok. stop_pool()-> wpool:stop_pool(my_pool), ok. my_overrun_handler(Report) -> io:format("my_overrun_handler ~p~n", [Report]). do_test()-> wpool:call(my_pool,{info},best_worker). do_crash()-> wpool:call(my_pool,{crash},best_worker).
test_worker.erl
-module(test_worker). -behaviour(gen_server). -export([start_link/1, format_status/2]). -export([init/1, handle_call/3, handle_cast/2,handle_info/2, terminate/2, code_change/3]). -record(state, {}). start_link([Args]) -> gen_server:start_link(?MODULE, [Args], []). init([Args]) -> io:format("working thread init ~p,~p~n", [self(), Args]), process_flag(trap_exit, true), {ok, #state{}}. handle_call({info}, _From, State) -> io:format("info~n"), {reply, _Reply = ok, State}; handle_call({crash}, _From, _State) -> 1 = 2, {noreply, crash}; handle_call(_Request, _From, State) -> {reply, _Reply = ok, State}. handle_cast(_Msg, State) -> {noreply, State}. handle_info({'EXIT', _Pid, Reason}, State) -> io:format("exit reason ~p~n", [Reason]), case Reason of normal -> io:format("normal exit trapped~n"), {stop, normal, State}; other -> io:format("other exit trapped~n"), {noreply, State} end; handle_info(_Info, State) -> {noreply, State}. terminate(_Reason, _State) -> io:format("terminate ~p,~p,~p~n", [_Reason, _State, self()]), ok. code_change(_OldVsn, State, _Extra) -> {ok, State}. format_status(_Opt, _StatusData) -> erlang:error(not_implemented).
相关文章推荐
- 浅析c++中的类型转换--const_cast
- IndexedDB: 浏览器里内置的数据库简介
- Application.mk
- 浅析c++中的类型转换--const_cast
- 算法(一)求链表中的倒数第K 个结点
- ENVI遥感影像自然真彩色增强方法
- 实现基于Task的异步模式
- 海思Hi3518内核编译过程中问题点记录
- ndk-build
- 地图定位异常问题
- struts2标签Tags的用法
- Spring官网改版后下载
- 新版WampServer项目路径前面没有localhost
- 饭碗是要靠抢的
- Sql Server 分页查询
- C++文件(夹)选择对话框
- 安卓TV开发(十) 智能电视开发之在线视频直播
- 安卓TV开发(十) 智能电视开发之在线视频直播
- 汇编语言 第三版 王爽 实验9 根据材料编程
- 流程控制