我正在使用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对象(即结果的给定元素),是否有办法查看该函数是否已被调用或是否位于池的队列中?
答案 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()