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