如何判断apply_async函数是否已启动或是否仍在多处理队列中

时间:2019-02-01 21:12:21

标签: python parallel-processing python-multiprocessing

我正在使用python的multiprocessing.Pool和apply_async调用一堆函数。

如何判断某个函数是否已开始由池中的成员进行处理,或者它是否位于队列中?

例如:

import multiprocessing
import time

def func(t):
    #take some time processing
    print 'func({}) started'.format(t)
    time.sleep(t)

pool = multiprocessing.Pool()

results = [pool.apply_async(func, [t]) for t in [100]*50] #adds 50 func calls to the queue

对于AsyncResult中的每个results,您可以调用ready()get(0)来查看功能是否已完成运行。但是,如何确定功能是否已开始但尚未结束?

即对于给定的AsyncResult对象(即结果的给定元素),是否有办法查看该函数是否已被调用或是否位于池的队列中?

1 个答案:

答案 0 :(得分:0)

首先,从结果列表中删除完成的作业

    results = [r for r in results if not r.ready()]

待处理的进程数是结果列表的长度:

    pending = len(results)

未决但尚未开始的数目是未决总数-pool_size

    not_started = pending - pool_size
如果创建池时使用默认参数,则

pool_size将为multiprocessing.cpu_count()