检查一个`concurrent.futures.ThreadPoolExecutor`

我有一个live concurrent.futures.ThreadPoolExecutor 。 我想检查它的状态。 我想知道有多少线程,有多少处理任务和哪些任务,多少空闲以及哪些任务在队列中。 我怎样才能找到这些东西?


对池和待处理的工作项队列有一些可见性。 要找出可用的内容,请打印poolx.__dict__以查看结构。 阅读ThreadPool代码,它非常好:concurrent.futures.thread

下面用一个线程创建一个池。 然后它创建两个工作:一个睡3秒钟,另一个立即返回。 然后打印池的未决工作项目的数量。

之后,我们打印出工作队列中的项目。 在这种情况下,一个线程正在执行time.sleep(3)函数,因此它不在队列中。 带有args [0]和kwargs {} sleep函数被打印出来,因为这是池运行的下一个工作项目。

感谢@dano为无损队列洞察力,以及@abarnert。

资源

import concurrent.futures, time

poolx = concurrent.futures.ThreadPoolExecutor(max_workers=1)
poolx.submit(time.sleep, 3)
poolx.submit(time.sleep, 0)   # very fast

print('pending:', poolx._work_queue.qsize(), 'jobs')
print('threads:', len(poolx._threads))
print()

# TODO: make thread safe; work on copy of queue?
print('Estimated Pending Work Queue:')
for num,item in enumerate(poolx._work_queue.queue):
    print('{}t{}t{}t{}'.format(
        num+1, item.fn, item.args, item.kwargs,
        ))

poolx.shutdown(wait=False)

产量

pending: 1 jobs
threads: 1

Pending Work Queue:
1   <built-in function sleep>   (0,)    {}
链接地址: http://www.djcxy.com/p/80935.html

上一篇: Checking up on a `concurrent.futures.ThreadPoolExecutor`

下一篇: What is the python equivalent of JavaScript's Array.prototype.some?