如何监控python的concurrent.futures.ProcessPoolExecutor?

mor*_*itz 12 python monitoring process capacity concurrent.futures

我们使用ProcessPoolExecutorconcurrent.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)