mor*_*itz 12 python monitoring process capacity concurrent.futures
我们使用ProcessPoolExecutor从concurrent.futures在流程中的池异步接收请求,并进行实际的同步处理的服务.
一旦我们遇到流程池耗尽的情况,那么新请求必须等到其他一些流程完成.
有没有办法询问进程池的当前用法?这将使我们能够监控其状态并进行适当的容量规划.
如果没有,是否有任何良好的替代流程池实现与支持此类监控/容量规划的异步接口?
voi*_*oid 11
最简单的方法是扩展ProcessPoolExecutor所需的行为.以下示例维护stdlib接口,但不访问实现细节:
from concurrent.futures import ProcessPoolExecutor
class MyProcessPoolExecutor(ProcessPoolExecutor):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._running_workers = 0
def submit(self, *args, **kwargs):
future = super().submit(*args, **kwargs)
self._running_workers += 1
future.add_done_callback(self._worker_is_done)
return future
def _worker_is_done(self, future):
self._running_workers -= 1
def get_pool_usage(self):
return self._running_workers
Run Code Online (Sandbox Code Playgroud)