我希望这个池有一个功能(或多个选项)可以在最大空闲超时时自动减少其工作人员的数量。
我已经阅读了poolboy
和worker_pool
的文档,发现只有最大工人数量选项,但没有选项来减少它。
是否存在或如何修改它们?
答案 0 :(得分:8)
poolboy 会在没有工作的情况下自动减少工作人员。
您让工作人员从池中使用checkout
进行一些工作,并使用checking
释放该工作人员,作为替代方法,您可以将工作附加到transaction
上自动结帐工人在完成工作后检查工人。
启动池时, poolboy 会自动创建一些 size 工作人员,等待处理某些工作。
当您致电checkout
时,poolboy会尝试获取已启动的其中一个工作人员,如果所有工作人员已经结账,因为他们正在做一些工作,则会检查其 max_overflow 配置并开始创建工作人员来处理负载,直到达到 max_overflow 。
当一名工人被释放时,如果工人没有更多的工作,他们就会被杀死。
所以如果你创建一个像
这样的游泳池{pool, [
{size, 100},
{max_overflow, 900}
]}
它将立即启动100个进程,如果您一次结账(使用checkout
或transaction
)超过100名工作人员,那么对于新的结帐将开始创建流程,直到达到1000总共进程(从第一个时刻创建100个进程,最多900个进程溢出),如果你继续尝试检查更多进程,它将在超时时开始给出错误(除非你用infinity
调用checkout,在这种情况下它会阻塞,直到一个工人完成任务完成,注意你也可以在不阻止调用者的情况下调用一个工人。)
现在,如果你需要更多的行为,比如保持溢出工作者继续运行直到它通过10分钟不活动,你需要自己做代码,在这种情况下你可以获得poolboy的源代码(它易于准备和遵循,主要代码在https://github.com/devinus/poolboy/blob/master/src/poolboy.erl及其仅350行代码)并根据您的需要更新release of workers
答案 1 :(得分:0)