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

my_pool.erl

  1. -module(my_pool).
  2.  
  3. -export([start/, stop/]).
  4. -export([my_overrun_handler/,do_test/,do_crash/]).
  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,},
  20. {
  21. overrun_handler,{?MODULE,my_overrun_handler}
  22. },
  23. {workers, },
  24. {worker, {test_worker, []}}
  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/, format_status/]).
  6. -export([init/, handle_call/, handle_cast/,handle_info/, terminate/, code_change/]).
  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. = ,
  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).

worker_pool的例子的更多相关文章

  1. SQLServer地址搜索性能优化例子

    这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...

  2. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  3. REGEX例子

    作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...

  4. CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子

    CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...

  5. 简单例子了解View的事件分发

    什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...

  6. 简单的例子了解自定义ViewGroup(一)

    在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...

  7. kqueue例子

    网络服务器通常都使用epoll进行异步IO处理,而开发者通常使用mac,为了方便开发,我把自己的handy库移植到了mac平台上.移植过程中,网上居然没有搜到kqueue的使用例子,让我惊讶不已.为了 ...

  8. 今天有群友不是很清楚htm直接存数据库的危害,我简单举个例子

     通过这个案例就知道为什么不要把原生的html放数据库了  常见的几种转码  常用的几种显示方法 只有原生html和最下面一种弹框了,变成了持久xss 如果是Ajax的方式,请用@Ajax.JavaS ...

  9. ElasticSearch 5学习(5)——第一个例子(很实用)

    想要知道ElasticSearch是如何使用的,最快的方式就是通过一个简单的例子,第一个例子将会包括基本概念如索引.搜索.和聚合等,需求是关于公司管理员工的一些业务. 员工文档索引 业务首先需要存储员 ...

随机推荐

  1. Java-->实现断点续传(下载)

    --> 断点续传: 就像迅雷下载文件一样,停止下载或关闭程序,下次下载时是从上次下载的地方开始继续进行,而不是重头开始... --> RandomAccessFile --> poi ...

  2. tyvj1011 - 传纸条 ——DP

    题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1011 状态转移方程: f[k,x1,x2] = max(f[k-1,x1,x2],f[k-1,x1-1, ...

  3. numpy常用函数

    numpy.ndarray.astype  更改np.array的类型.

  4. Codeforces Round #110 (Div. 2)

    Codeforces Round #110 (Div. 2) C. Message 题意 给两个长度不超过2000的字符串\(s,u\),仅由小写字母构成. 找出\(s\)的一个子串\(t\),通过3 ...

  5. Hammer.js移动端触屏框架的使用

    hammer.js是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove. ...

  6. 《苹果开发之Cocoa编程》挑战1 创建委托 练习

    <苹果开发之Cocoa编程>第4版 P87 新建一个单窗口应用程序,设置某对象为窗口的委托,当用户调整窗口尺寸时,确保窗口高度为宽度的2倍. 需要实现的委托方法为:-(NSSize)win ...

  7. 黑马程序员——JAVA基础之简述集合collection

    ------- android培训.java培训.期待与您交流! ---------- 集合: 为什么出现集合类? •  面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对 ...

  8. mave之:java的web项目必须要的三个jar的pom形式

    jsp-api javax.servlet-api jstl <!-- jsp --> <dependency> <groupId>javax.servlet< ...

  9. 【转】NSString属性什么时候用copy,什么时候用strong?

    原文网址:http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境) ...

  10. 对象属性操作-包含kvc---ios

    #import <Foundation/Foundation.h> @class Author; @interface Books : NSObject{ @private NSStrin ...